为什么我能够使用SparkContext映射RDD

时间:2017-07-04 16:13:35

标签: apache-spark serialization rdd

SparkContext不可序列化。它是用于驱动程序,因此有人可以解释以下内容吗?

使用spark-shell,on yarn和Spark版本1.6.0

val rdd = sc.parallelize(Seq(1))
rdd.foreach(x => print(sc))

客户端上没有任何操作(打印执行程序端)

使用spark-shell,本地主服务器和Spark版本1.6.0

val rdd = sc.parallelize(Seq(1))
rdd.foreach(x => print(sc))

在客户端上打印“null”

使用pyspark,本地主服务器和Spark版本1.6.0

rdd = sc.parallelize([1])
def _print(x):
    print(x)
rdd.foreach(lambda x: _print(sc))

引发例外

我也尝试了以下内容:

使用spark-shell和Spark版本1.6.0

class Test(val sc:org.apache.spark.SparkContext) extends Serializable{}
val test = new Test(sc)
rdd.foreach(x => print(test))

现在它最终抛出了一个 java.io.NotSerializableException:org.apache.spark.SparkContext

当我只打印sc时,为什么它在Scala中有效?为什么我应该抛出一个NotSerializableException(或者我认为......)时有一个空引用

0 个答案:

没有答案