RDD 交集
RDD intersections
我想查询两个 RDD 之间的交集。
我的第一个 RDD 有一个这样的元素列表:
A = List(1,2,3,4), List(4,5,6), List(8,3,1),List(1,6,8,9,2)
而第二个RDD是这样的:
B = (1,2,3,4,5,6,8,9)
(我可以将 B 作为 Set
而不是第一个存储在内存中。)
我想对 A 和 B 中的每个元素进行交集
List(1,2,3,4).intersect((1,2,3,4,5,6,8,9))
List(4,5,6).intersect((1,2,3,4,5,6,8,9))
List(8,3,1).intersect((1,2,3,4,5,6,8,9))
List(1,6,8,9,2).intersect((1,2,3,4,5,6,8,9))
我如何在 Scala 中执行此操作?
val result = rdd.map( x => x.intersect(B))
B
和 rdd
必须具有相同的类型(在本例中为 List[Int]
)。另外,请注意,如果 B 很大但适合内存,您可能希望将其广播为 documented here。
scala> val B = List(1,2,3,4,5,6,8,9)
B: List[Int] = List(1, 2, 3, 4, 5, 6, 8, 9)
scala> val rdd = sc.parallelize(Seq(List(1,2,3,4), List(4,5,6), List(8,3,1),List(1,6,8,9,2)))
rdd: org.apache.spark.rdd.RDD[List[Int]] = ParallelCollectionRDD[0] at parallelize at <console>:21
scala> rdd.map( x => x.intersect(B)).collect.mkString("\n")
res3: String =
List(1, 2, 3, 4)
List(4, 5, 6)
List(8, 3, 1)
List(1, 6, 8, 9, 2)
我想查询两个 RDD 之间的交集。
我的第一个 RDD 有一个这样的元素列表:
A = List(1,2,3,4), List(4,5,6), List(8,3,1),List(1,6,8,9,2)
而第二个RDD是这样的:
B = (1,2,3,4,5,6,8,9)
(我可以将 B 作为 Set
而不是第一个存储在内存中。)
我想对 A 和 B 中的每个元素进行交集
List(1,2,3,4).intersect((1,2,3,4,5,6,8,9))
List(4,5,6).intersect((1,2,3,4,5,6,8,9))
List(8,3,1).intersect((1,2,3,4,5,6,8,9))
List(1,6,8,9,2).intersect((1,2,3,4,5,6,8,9))
我如何在 Scala 中执行此操作?
val result = rdd.map( x => x.intersect(B))
B
和 rdd
必须具有相同的类型(在本例中为 List[Int]
)。另外,请注意,如果 B 很大但适合内存,您可能希望将其广播为 documented here。
scala> val B = List(1,2,3,4,5,6,8,9)
B: List[Int] = List(1, 2, 3, 4, 5, 6, 8, 9)
scala> val rdd = sc.parallelize(Seq(List(1,2,3,4), List(4,5,6), List(8,3,1),List(1,6,8,9,2)))
rdd: org.apache.spark.rdd.RDD[List[Int]] = ParallelCollectionRDD[0] at parallelize at <console>:21
scala> rdd.map( x => x.intersect(B)).collect.mkString("\n")
res3: String =
List(1, 2, 3, 4)
List(4, 5, 6)
List(8, 3, 1)
List(1, 6, 8, 9, 2)