2017-10-17 7 views
1

Je travaille avec Spark RDD. Je dois ajouter/concaténer deux RDD de type Set.Ajouter/concaténer deux RDD de type Set dans Apache Spark

scala> var ek: RDD[Set[Int]] = sc.parallelize(Seq(Set(7))) 
ek: org.apache.spark.rdd.RDD[Set[Int]] = ParallelCollectionRDD[31] at parallelize at <console>:32 

scala> val vi: RDD[Set[Int]] = sc.parallelize(Seq(Set(3,5))) 
vi: org.apache.spark.rdd.RDD[Set[Int]] = ParallelCollectionRDD[32] at parallelize at <console>:32 

scala> val z = vi.union(ek) 
z: org.apache.spark.rdd.RDD[Set[Int]] = UnionRDD[34] at union at <console>:36 

scala> z.collect 
res15: Array[Set[Int]] = Array(Set(3, 5), Set(7)) 

scala> val t = visited++ek 
t: org.apache.spark.rdd.RDD[Set[Int]] = UnionRDD[40] at $plus$plus at <console>:36 

scala> t.collect 
res30: Array[Set[Int]] = Array(Set(3, 5), Set(7)) 

J'ai essayé d'utiliser deux opérateurs, union et ++. Cependant, cela ne produit pas le résultat attendu.

Array(Set(3, 5), Set(7)) 

Le résultat attendu devrait être comme ceci:

scala> val u = Set(3,5) 
u: scala.collection.immutable.Set[Int] = Set(3, 5) 

scala> val o = Set(7) 
o: scala.collection.immutable.Set[Int] = Set(7) 

scala> u.union(o) 
res28: scala.collection.immutable.Set[Int] = Set(3, 5, 7) 

Quelqu'un peut-il me donner des directives comment le faire

Répondre

2

Vous postulez l'union sur une liste (seq) des ensembles qui est pourquoi les éléments sont les ensembles complets et non leurs éléments. Essayez d'utiliser:

var ek = sc.parallelize(Set(7).toSeq) 
val vi = sc.parallelize(Set(3,5).toSeq) 
val z = vi.union(ek)