sparkDataframe保存在hdfs位置的单个文件中

jchrr9hc  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(519)

这个问题在这里已经有答案了

如何将rdd数据保存到json文件而不是文件夹中(3个答案)
四年前关门了。
我有Dataframe,我想保存在hdfs位置上的单个文件中。
我在这里找到的解决方案是使用spark csv编写单个csv文件

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

但是所有的数据都会被写入mydata.csv/part-00000,我想成为mydata.csv文件。
有可能吗?
有人帮忙吗

93ze6v8z

93ze6v8z1#

使用标准的spark库是不可能的,但是您可以使用hadoop api来管理文件系统—将输出保存在临时目录中,然后将文件移动到请求的路径。例如(在pyspark中):

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

from py4j.java_gateway import java_import
java_import(spark._jvm, 'org.apache.hadoop.fs.Path')

fs = spark._jvm.org.apache.hadoop.fs.FileSystem.get(spark._jsc.hadoopConfiguration())
file = fs.globStatus(sc._jvm.Path('mydata.csv-temp/part*'))[0].getPath().getName()
fs.rename(sc._jvm.Path('mydata.csv-temp/' + file), sc._jvm.Path('mydata.csv'))
fs.delete(sc._jvm.Path('mydata.csv-temp'), True)

相关问题