[英]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.