在Scala Spark中嵌套RDD

时间:2014-05-22 20:30:30

标签: scala apache-spark rdd

参考这个问题:NullPointerException in Scala Spark, appears to be caused be collection type?

答案指出“Spark不支持RDD的嵌套(对于同一问题的另一次出现,请参见https://stackoverflow.com/a/14130534/590203),因此您无法对其他RDD操作中的RDD执行转换或操作。”

此代码:

val x = sc.parallelize(List(1 , 2, 3))

def fun1(n : Int) = {
    fun2(n)
}

def fun2(n: Int) = {
    n + 1
}

x.map(v => fun1(v)).take(1)

打印:

Array[Int] = Array(2)

这是正确的。

但这是否意味着“不能对其他RDD操作中的RDD执行转换或操作”。既然在RDD上发生了嵌套动作?

1 个答案:

答案 0 :(得分:2)

没有。在链接的问题d.filter(...)中返回RDD,因此返回

的类型
d.distinct().map(x => d.filter(_.equals(x)))

RDD[RDD[String]]。这是不允许的,但它不会在您的代码中发生。如果我理解答案是正确的,即使您最终没有d,也无法引用mapRDD[RDD[SomeType]]内的其他RDD。< / p>