簡體   English   中英

如何在SPARK數據框創建的文件夾中合並所有零件文件並在Scala中將其重命名為文件夾名稱

[英]How to merge all part files in a folder created by SPARK data frame and rename as folder name in scala

嗨,我有spark數據框的輸出,該數據框創建了文件夾結構,並可能創建了零件文件。 現在,我必須合並文件夾中的所有零件文件,並將該文件重命名為文件夾路徑名。

這是我做分區的方法

df.write.partitionBy("DataPartition","PartitionYear")
  .format("csv")
  .option("nullValue", "")
  .option("header", "true")/
  .option("codec", "gzip")
  .save("hdfs:///user/zeppelin/FinancialLineItem/output")

它創建這樣的文件夾結構

hdfs:///user/zeppelin/FinancialLineItem/output/DataPartition=Japan/PartitionYear=1971/part-00001-87a61115-92c9-4926-a803-b46315e55a08.c000.csv.gz
hdfs:///user/zeppelin/FinancialLineItem/output/DataPartition=Japan/PartitionYear=1971/part-00002-87a61115-92c9-4926-a803-b46315e55a08.c001.csv.gz

我必須像這樣創建最終文件

hdfs:///user/zeppelin/FinancialLineItem/output/Japan.1971.currenttime.csv.gz

此處位001和002的任何零件文件都未合並為兩個。

我的數據大小非常大,有300 GB gzip和35 GB的壓縮文件,所以coalesce(1) and repartition速度非常慢。

我在這里看到一種解決方案, 使用spark-csv編寫單個CSV文件,但是我無法實現它,請幫助我。

分區拋出錯誤

error: value repartition is not a member of org.apache.spark.sql.DataFrameWriter[org.apache.spark.sql.Row]
       dfMainOutputFinalWithoutNull.write.repartition("DataPartition","StatementTypeCode")

從Spark外部的頭節點嘗試...

hdfs dfs -getmerge <src> <localdst>

https://hadoop.apache.org/docs/r1.2.1/file_system_shell.html#getmerge

“將源目錄和目標文件作為輸入,並將src中的文件連接到目標本地文件中。可以選擇將addnl設置為啟用,以在每個文件的末尾添加換行符。”

暫無
暫無

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

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