【发布时间】:2018-08-28 15:11:28
【问题描述】:
我正在尝试使用 SparkContext.binaryFiles 函数来处理一组 ZIP 文件。设置是从文件名的 RDD 映射,其中映射函数使用 binaryFiles 函数。
问题是映射函数中引用了 SparkContext,我收到此错误。我该如何解决?
PicklingError:无法序列化对象:异常:您似乎正试图从广播变量、操作或转换中引用 SparkContext。 SparkContext 只能在驱动程序上使用,不能在它在工作人员上运行的代码中使用。有关详细信息,请参阅 SPARK-5063。
示例代码:
file_list_rdd.map(lambda x: sc.binaryFiles("/FileStore/tables/xyz/" + x[1]))
file_list_rdd 是 (id, filename) 元组的 RDD。
【问题讨论】:
-
其实,在现实世界中。我们很少(几乎不)将 SparkContext 对象从驱动程序转移到工作人员。那么为什么需要这样做呢?
-
那是因为 binaryFiles 函数只在 SparkContext 类中可用...见spark.apache.org/docs/latest/api/python/pyspark.html
-
你能分享一些代码吗?这是一个需要考虑的众所周知的问题。
-
用示例代码更新了问题。我认为我的问题是我想要有两个级别 - 对于顶级 RDD 中的每一行,我想创建一个新的 RDD。但是,创建 RDD 的唯一方法是使用 SparkContext,但我不能在那里使用 SparkContext...
-
任何值,答案是什么?
标签: pyspark