Python 使用Pyspark在HDFS中将文件从一个目录移动到另一个目录
我试图从一个目录中读取所有JSON文件的数据,并使用下面的代码将它们存储在Spark Dataframe中。(很好用) 但是当我尝试用多个文件保存数据帧时,使用下面的代码Python 使用Pyspark在HDFS中将文件从一个目录移动到另一个目录,python,apache-spark,pyspark,hdfs,Python,Apache Spark,Pyspark,Hdfs,我试图从一个目录中读取所有JSON文件的数据,并使用下面的代码将它们存储在Spark Dataframe中。(很好用) 但是当我尝试用多个文件保存数据帧时,使用下面的代码 df.write.json("hdfs:///user/another_dir/to_save_dir/") 它没有按预期存储文件,并抛出错误,如to\u save\u dir已经存在 我只想像从源目录到目标目录一样保存文件 编辑: 问题是,当我读取多个文件并希望将其写入一个目录时,Pyspark中的过程
df.write.json("hdfs:///user/another_dir/to_save_dir/")
它没有按预期存储文件,并抛出错误,如to\u save\u dir
已经存在
我只想像从源目录到目标目录一样保存文件
编辑:
问题是,当我读取多个文件并希望将其写入一个目录时,Pyspark中的过程是什么?我问这个问题的原因是,一旦spark加载了它创建一个数据帧的所有文件,并且每个文件都是该数据帧中的一行,我应该如何继续为数据帧中的每一行创建新文件。您得到的错误非常清楚,您试图写入的位置似乎已经存在。您可以通过指定
模式
来选择覆盖它:
df.write.mode("overwrite").json("hdfs:///user/another_dir/to_save_dir/")
但是如果您只想在HDFS中将文件从一个位置移动到另一个位置,则无需在Spark中读取文件,然后再写入。相反,请尝试使用:
感谢@blackishop的回复,但我想使用Pyspark移动数据,问题是,当我读取多个文件并希望将其写入目录时,Pyspark中的过程是什么?我问这个问题的原因是,一旦spark加载了所有文件,它就会创建一个数据帧,并且每个文件都是该数据帧中的一行,那么我应该如何继续为该数据帧中的每一行创建新文件呢dataframe@DanialShabbir请问您为什么要使用Pyspark来移动文件?在目标文件夹中不能像这样获得相同的文件名和文件夹结构。如果您想要完全相同的文件名和结构,则必须逐个处理一个文件。另一种解决方案是在编写数据帧时使用
partitionBy
:df.withColumn(“文件名”,输入文件名())。write.partitionBy(“文件名”)…
。partitionBy()正在创建Part-1xxxx.json文件不是一个完整的文件,但无论如何我使用了dfs api。谢谢,伙计
df.write.mode("overwrite").json("hdfs:///user/another_dir/to_save_dir/")
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)