web-dev-qa-db-ja.com

spark dataframe to .csv to header and specific filenameをエクスポートする

spark dataframeから.csvファイルにデータをエクスポートしようとしています:

df.coalesce(1)\
  .write\
  .format("com.databricks.spark.csv")\
  .option("header", "true")\
  .save(output_path)

「part-r-00001-512872f2-9b51-46c5-b0ee-31d626063571.csv」というファイル名を作成しています

ファイル名を「part-r-00000.csv」または「part-00000.csv」にしたい

AWS S3でファイルが作成されているため、os.systemコマンドの使用方法に制限があります。

ヘッダーをファイルに保持したままファイル名を設定するにはどうすればよいですか?

ありがとう!

7
Naresh Y

質問の評価は-3ですが、ここでは問題の解決に役立つ解決策を投稿しています。私は技術者であり、常に文法を調べるよりもコード/ロジックについて悩みます。少なくとも私にとっては、問題を理解するために小さなコンテキストが必要です。

ソリューションに来る:

spark dataframeから.csvファイルを作成すると、

出力ファイルは、デフォルトではpart-x-yyyyyという名前です。ここで、

1)xは、ジョブがマップのみのジョブであるか、reduceであるかに応じて、「m」または「r」のいずれかです。2)yyyyyは、マッパーまたはリデューサータスクの番号で、00000または乱数のいずれかです。

出力ファイルの名前を変更するには、os.system HDFSコマンドを実行する必要があります。

_import os, sys
output_path_stage = //set the source folder path here
output_path  = // set the target folder path here
//creating system command line
cmd2 = "hdfs dfs -mv " + output_path_stage + 'part-*' + '  ' + output_path + 'new_name.csv'
//executing system command
os.system(cmd2)
_

fyi、rdd.saveAsTextFileオプションを使用すると、ファイルはヘッダーなしで作成されます。 coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").save(output_path)を使用すると、ランダムなpart-x名でファイルが作成されます。上記のソリューションは、ヘッダー、区切り文字、および必要なファイル名を含む.csvファイルの作成に役立ちます。

6
Naresh Y