簡體   English   中英

如何使用databricks中的pyspark將spark數據幀中的所有行數據提取到文件中

[英]How to fetch all rows data from spark dataframe to a file using pyspark in databricks

我正在嘗試將所有行數據從 spark 數據幀中提取到數據塊中的文件中。 我能夠將 df 數據寫入只有很少計數的文件。 假設如果我將 df 中的計數設為 100 ,那么在文件中它的計數為 50 ,因此它正在跳過數據。如何將已完成的數據從數據幀加載到文件中而不跳過數據。 我創建了一個 udf,udf 將打開文件並將數據附加到它。我在 spark sql df 中調用了該 udf。

有人可以幫助我解決這個問題嗎?

出於以下幾個原因,我建議您不要像現在這樣使用 udf:

  • UDF 在工作節點上運行,因此您將有多個 udf,每個 udf 將您的數據的一部分寫入本地文件。
  • 即使您將 UDF 附加到共享位置(如 DBFS)中的文件,您仍然有多個節點同時寫入文件,這可能會導致錯誤。
  • Spark 已經有一種開箱即用的方法,您應該利用它

要將 spark 數據幀寫入 databricks 中的文件:使用 Dataframe.write 屬性( Databricks 文檔)。 有很多選擇,所以應該可以做任何你需要的事情( Spark docs (這個是針對 CSV 的))

關於分區的注意事項: Spark 將 DF 的每個分區寫入自己的文件中,因此您應該使用合並函數(警告:這對於非常大的數據幀來說非常慢,因為 Spark 必須將整個數據幀放入驅動程序節點的內存中)

關於文件位置的注意事項:您提供的文件路徑將在驅動程序節點上,因此除非您打算用另一個腳本讀回它,否則您應該以 "/dbfs" 開始您的路徑,該路徑安裝在所有節點的文件上系統。通過這種方式,它保存在 Databricks 文件系統上,可以從您的 databricks 實例中的任何集群訪問。 (也可以使用 Databricks CLI 下載。)

完整示例:

df_to_write = my_df.select(<columns you want>)
df_to_write.coalesce(1).write.csv("/dbfs/myFileDownloads/dataframeDownload.csv")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM