[英]Custom Hadoop Configuration for Spark from Python (PySpark)?
[英]How to copy a file in pyspark / hadoop from python
我正在使用pyspark將數據幀另存為實木復合地板文件或csv文件:
def write_df_as_parquet_file(df, path, mode="overwrite"):
df = df.repartition(1) # join partitions to produce 1 parquet file
dfw = df.write.format("parquet").mode(mode)
dfw.save(path)
def write_df_as_csv_file(df, path, mode="overwrite", header=True):
df = df.repartition(1) # join partitions to produce 1 csv file
header = "true" if header else "false"
dfw = df.write.format("csv").option("header", header).mode(mode)
dfw.save(path)
但這會將parquet / csv文件保存在名為path
的文件夾中,它以這種方式保存了一些我們不需要的其他文件:
圖片: https : //ibb.co/9c1D8RL
基本上,我想創建一些函數,使用上述方法將文件保存到某個位置,然后將CSV或PARQUET文件移動到新位置。 喜歡:
def write_df_as_parquet_file(df, path, mode="overwrite"):
# save df in one file inside tmp_folder
df = df.repartition(1) # join partitions to produce 1 parquet file
dfw = df.write.format("parquet").mode(mode)
tmp_folder = path + "TEMP"
dfw.save(tmp_folder)
# move parquet file from tmp_folder to path
copy_file(tmp_folder + "*.parquet", path)
remove_folder(tmp_folder)
我怎樣才能做到這一點? 如何實現copy_file
或remove_folder
? 我在scala中看到了一些解決方案,為此使用了Hadoop api,但是我無法在python中完成這項工作。 我認為我需要使用sparkContext,但是我仍在學習Hadoop,但還沒有找到實現它的方法。
您可以使用Python的HDFS庫之一來連接到HDFS實例,然后執行所需的任何操作。
從hdfs3 docs( https://hdfs3.readthedocs.io/en/latest/quickstart.html ):
from hdfs3 import HDFileSystem
hdfs = HDFileSystem(host=<host>, port=<port>)
hdfs.mv(tmp_folder + "*.parquet", path)
將以上內容包裝在一個函數中,您一切順利。
注意:我只是以hdfs3為例。 您也可以使用hdfsCLI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.