如何解决Pyspark-读取地图函数中的数据?
我有一个如下数据框:
id | file_path
--------------------------
abc | s3://data/file1.json
def | s3://data/file2.json
对于此数据框中的每一行,我都希望以分布式方式读取位于file_path
中的文件的内容。
这是我尝试过的:
rdd_paths = df.rdd.map(lambda x: x.file_path)
rdd_contents = rdd_paths.map(lambda y: spark.read.parquet(y))
rdd_contents.take(2)
这给了我以下错误:
Exception: It appears that you are attempting to reference SparkContext from a broadcast variable,action,or transformation. SparkContext can only be used on the driver,not in code that it run on workers. For more information,see SPARK-5063.
我检查了SPARK-5063
,但没有获得明确的解决方案。如何以分布式方式从文件路径读取?
解决方法
火花上下文只能从驱动程序节点访问,因为map()
是在工作节点中执行的,因此它无法访问执行spark
的代码中的spark.read.parquet(y)
。
您需要修改逻辑,例如(不是一个很好的例子),您可以将s3路径的列值传递给textFile
,后者将提供key
作为文件名和{{1 }}作为文件内容。
value
现在,您可以应用map或进行迭代以将paths = df.select('file_path').collect()
rdd4 = sc.textFile(paths)
(文件内容)存储为数据框中的列。例如使用join。
values
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。