参考这个问题: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上发生了嵌套动作?
答案 0 :(得分:2)
没有。在链接的问题d.filter(...)
中返回RDD,因此返回
d.distinct().map(x => d.filter(_.equals(x)))
是RDD[RDD[String]]
。这是不允许的,但它不会在您的代码中发生。如果我理解答案是正确的,即使您最终没有d
,也无法引用map
或RDD[RDD[SomeType]]
内的其他RDD。< / p>