如何重命名pyspark生成的JSON?

问题描述 投票:0回答:2

当我用编写JSON文件时

dataframe.coalesce(1).write.format('json')

在pyspark上,我无法更改分区中的文件名

我正在这样写我的JSON:

dataframe.coalesce(1).write.format('json').mode('overwrite').save('path')

但是我无法更改分区中的文件名

我想要这样的路径:

/文件夹/ my_name.json

其中“ my_name.json”是json文件

json apache-spark pyspark
2个回答
0
投票
dataframe.coalesce(1).write.format('json').mode('overwrite').save('/path/file_name')

这将创建一个具有file_name的文件夹。选中此文件夹,您将获得一个文件,其整体数据为000。

在Spark中,数据分散在多个节点上,计算并行进行,最终数据部分发送到目录中。文件大小越大,将生成更多的“部分”文件。因此,不可能写入单个文件。如果是part-00,则可以在完成后重命名文件。


0
投票

在spark we can't control name of the file中写入目录。

首先将数据写入HDFS directory,然后要更改文件名,我们需要使用HDFS api

Example:

l=[("a",1)]
ll=["id","sa"]
df=spark.createDataFrame(l,ll)

hdfs_dir = "/folder/" #your hdfs directory
new_filename="my_name.json" #new filename

df.coalesce(1).write.format("json").mode("overwrite").save(hdfs_dir)

fs = spark._jvm.org.apache.hadoop.fs.FileSystem.get(spark._jsc.hadoopConfiguration())

#list files in the directory

list_status = fs.listStatus(spark._jvm.org.apache.hadoop.fs.Path(hdfs_dir))

#filter name of the file starts with part-

file_name = [file.getPath().getName() for file in list_status if file.getPath().getName().startswith('part-')][0]

#rename the file

fs.rename(Path(hdfs_dir+''+file_name),Path(hdfs_dir+''+new_filename))
© www.soinside.com 2019 - 2024. All rights reserved.