Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark RDD.groupBy,其中每个元素可以位于多个组中_Scala_Apache Spark_Group By_Rdd - Fatal编程技术网

Scala Spark RDD.groupBy,其中每个元素可以位于多个组中

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;对于每个元素,收集作为特定元素的除数的因子,这些因子将根据

假设我有一个倍数列表和一个因子列表(都是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
;对于每个元素,收集作为特定元素的除数的因子,这些因子将根据满足条件的因子数量进行复制;最后使用
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)))