Scala Spark RDD.groupBy,其中每个元素可以位于多个组中
假设我有一个倍数列表和一个因子列表(都是Int): 我想使用groupBy on multiples返回一个列表[(Int,Iterable[Int]),这样每对表示一个因子,并且该因子的所有倍数都是倍数。像这样:Scala Spark RDD.groupBy,其中每个元素可以位于多个组中,scala,apache-spark,group-by,rdd,Scala,Apache Spark,Group By,Rdd,假设我有一个倍数列表和一个因子列表(都是Int): 我想使用groupBy on multiples返回一个列表[(Int,Iterable[Int]),这样每对表示一个因子,并且该因子的所有倍数都是倍数。像这样: (1, Iterable(1,2,3,4,5,6)) (2, Iterable(2,4,6)) (3, Iterable(3,6)) 问题是groupBy似乎无法跨组复制元素。这是真的吗?您可以在rdd上使用flatMap;对于每个元素,收集作为特定元素的除数的因子,这些因子将根据
(1, Iterable(1,2,3,4,5,6))
(2, Iterable(2,4,6))
(3, Iterable(3,6))
问题是groupBy似乎无法跨组复制元素。这是真的吗?您可以在rdd上使用
flatMap
;对于每个元素,收集作为特定元素的除数的因子,这些因子将根据满足条件的因子数量进行复制;最后使用groupByKey
收集属于同一因素的元素:
multiples.flatMap(x => factors.collect{ case i if x % i == 0 => (i, x) }).groupByKey.collect
// res4: Array[(Int, Iterable[Int])] = Array((1,CompactBuffer(1, 2, 3, 4, 5, 6)),
// (2,CompactBuffer(2, 4, 6)),
// (3,CompactBuffer(3, 6)))
multiples.flatMap(x => factors.collect{ case i if x % i == 0 => (i, x) }).groupByKey.collect
// res4: Array[(Int, Iterable[Int])] = Array((1,CompactBuffer(1, 2, 3, 4, 5, 6)),
// (2,CompactBuffer(2, 4, 6)),
// (3,CompactBuffer(3, 6)))