使用一种非常简单的方法来读取数据,选择它的一个子集,然后编写它,我得到了这个' DataFrameWriter'对象不可调用。
我肯定错过了一些基本的东西。
使用AWS EMR:
$ pyspark
> dx = spark.read.parquet("s3://my_folder/my_date*/*.gz.parquet")
> dx_sold = dx.filter("keywords like '%sold%'")
# select customer ids
> dc = dx_sold.select("agent_id")
问题 目标是现在保存dc的值......例如到s3作为行分隔的文本文件。
最佳做法是什么?
尝试
我试过
dc.write("s3://my_folder/results/")
但收到了
TypeError: 'DataFrameWriter' object is not callable
也试过
X = dc.collect()
但最终收到了TimeOut错误消息。
也试过
dc.write.format("csv").options(delimiter=",").save("s3://my_folder/results/")
但最终收到了表格
的消息TaskSetManager: Lost task 4323.0 in stage 9.0 (TID 88327, ip-<hidden>.internal, executor 96): TaskKilled (killed intentionally)
答案 0 :(得分:0)
第一条评论是正确的:这是一个FS问题。 临时解决方案是将所需结果转换为列表,然后序列化列表。例如。
dc = dx_sold.select("agent_id").distinct()
result_list = [str(c) for c in dc.collect()]
pickle.dump(result_list, open(result_path, "wb"))