首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SparkContext只能在驱动程序上使用

SparkContext只能在驱动程序上使用
EN

Stack Overflow用户
提问于 2018-08-27 06:25:35
回答 1查看 8.6K关注 0票数 2

我试图使用SparkContext.binaryFiles函数来处理一组ZIP文件。设置是从文件名的RDD映射,其中映射函数使用binaryFiles函数。

问题是映射函数中引用了SparkContext,我得到了这个错误。我怎么才能修好它?

PicklingError:无法序列化对象:异常:似乎您试图从广播变量、操作或转换引用SparkContext。SparkContext只能在驱动程序上使用,而不能在它在工作人员上运行的代码中使用。有关更多信息,请参见火花-5063。

样本代码:

file_list_rdd.map(lambda x: sc.binaryFiles("/FileStore/tables/xyz/" + x[1]))

其中file_list_rdd是(id,filename)元组的RDD。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-27 07:16:35

看起来,您需要调用该函数而不引用星火上下文--如果这确实适用的话。

还可以考虑将函数/ def移动到map body语句本身。这通常是这样做的--我们使用的是函数式语言。我一直无法解决序列化错误,除非我诉诸上述,并移动防御到执行者逻辑。

一些文件处理也是通过驱动程序完成的。这篇文章可能会引起人们的兴趣:How to paralelize spark etl more w/out losing info (in file names)。根据您的代码片段,我将在这里查看这个。

您应该使用这样的方法,并相应地处理:

代码语言:javascript
复制
 zip_data = sc.binaryFiles('/user/path-to-folder-with-zips/*.zip')

现在您正在使用它从驱动程序和sc。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52033611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档