Apache-Spark:RDD 的嵌套 for-comprehensions
Apache-Spark: Nested for-comprehensions for RDDs
我正在尝试执行与此本地 Scala 代码等效的 Spark-RDD:
val intList1=List(1,2,3,4,5,6)
val intList2=List(10,20,30,40,50,60)
val divisiblePairs=for(
int1<-intList1;
int2<-intList2
if int2 % int1 == 0
) yield(int1,int2)
divisiblePairs.groupBy(_._1) //Map(6 -> List((6,30), (6,60)),...)
我试过:
val intRDD1=sc.parallelize(List(1,2,3,4,5,6))
val intRDD2=sc.parallelize(List(10,20,30,40,50,60))
val divisiblePairs=
for(
int1<-intRDD1;
int2<-intRDD2
if int2 % int1 == 0
) yield(int1,int2)
这需要一些额外的工作,但我遇到了错误,即使是在 for-comprehension 的正文中也是如此:
error: type mismatch; found :
org.apache.spark.rdd.RDD[(Int, Int)] required: TraversableOnce[?]
int2<-intList2
该错误是预料之中的,因为 Spark 不支持嵌套。您可以使用 cartesian
方法来做同样的事情:
for {
(int1, int2) <- intRDD1.cartesian(intRDD2)
if int2 % int1 == 0
} yield(int1, int2)
我正在尝试执行与此本地 Scala 代码等效的 Spark-RDD:
val intList1=List(1,2,3,4,5,6)
val intList2=List(10,20,30,40,50,60)
val divisiblePairs=for(
int1<-intList1;
int2<-intList2
if int2 % int1 == 0
) yield(int1,int2)
divisiblePairs.groupBy(_._1) //Map(6 -> List((6,30), (6,60)),...)
我试过:
val intRDD1=sc.parallelize(List(1,2,3,4,5,6))
val intRDD2=sc.parallelize(List(10,20,30,40,50,60))
val divisiblePairs=
for(
int1<-intRDD1;
int2<-intRDD2
if int2 % int1 == 0
) yield(int1,int2)
这需要一些额外的工作,但我遇到了错误,即使是在 for-comprehension 的正文中也是如此:
error: type mismatch; found : org.apache.spark.rdd.RDD[(Int, Int)] required: TraversableOnce[?] int2<-intList2
该错误是预料之中的,因为 Spark 不支持嵌套。您可以使用 cartesian
方法来做同样的事情:
for {
(int1, int2) <- intRDD1.cartesian(intRDD2)
if int2 % int1 == 0
} yield(int1, int2)