簡體   English   中英

使用 Pyspark 將文件從 HDFS 中的一個目錄移動到另一個目錄

[英]Moving files from one directory to another directory in HDFS using Pyspark

我正在嘗試從一個目錄中讀取所有 JSON 文件的數據,並使用下面的代碼將它們存儲在 Spark Dataframe 中。 (它工作正常)

spark = SparkSession.builder.getOrCreate()


df = spark.read.json("hdfs:///user/temp/backup_data/st_in_*/*/*.json",multiLine=True)

但是當我嘗試用多個文件保存 DataFrame 時,使用下面的代碼

df.write.json("hdfs:///user/another_dir/to_save_dir/")

它沒有按預期存儲文件並引發錯誤,例如to_save_dir已存在

我只想保存文件,就像我從源目錄讀取到目標目錄一樣。

編輯:

問題是,當我讀取多個文件並想將其寫入一個目錄時,Pyspark 中的程序是什么? 我問這個的原因是因為一旦火花加載了所有文件,它會創建一個 dataframe,並且每個文件都是這個 dataframe 中的一行,我應該如何繼續為 Z6A8064B5DF47945057070 中的每一行創建新文件

您得到的錯誤很清楚,您嘗試寫入的位置似乎已經存在。 您可以通過指定mode選擇覆蓋它:

df.write.mode("overwrite").json("hdfs:///user/another_dir/to_save_dir/")

但是,如果您的意圖是僅將文件從 HDFS 中的一個位置移動到另一個位置,則無需在 Spark 中讀取文件然后寫入它們。 相反,請嘗試使用Hadoop FS API

conf = sc._jsc.hadoopConfiguration()
Path = sc._gateway.jvm.org.apache.hadoop.fs.Path
FileUtil = sc._gateway.jvm.org.apache.hadoop.fs.FileUtil

src_path = Path(src_folder)
dest_path = Path(dest_folder)

FileUtil.copy(src_path.getFileSystem(conf), 
              src_path,
              dest_path.getFileSystem(conf),
              dest_path,
              True,
              conf)

暫無
暫無

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

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