2017-08-07 197 views
0

使用非常簡單的方法來讀取數據,選擇它的一個子集,然後寫下來,我得到'DataFrameWriter'對象不可調用。DataFrameWriter not callable

我肯定缺少一些基本的東西。

使用的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() 

但eventua lly收到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) 
+1

DataFrameWriter實際上是不可調用的,它應該是'df.write.save',但在這裏它看起來像是你的FS而不是Spark的問題。 – philantrovert

回答

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"))