当我用编写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文件
dataframe.coalesce(1).write.format('json').mode('overwrite').save('/path/file_name')
这将创建一个具有file_name的文件夹。选中此文件夹,您将获得一个文件,其整体数据为000。
在Spark中,数据分散在多个节点上,计算并行进行,最终数据部分发送到目录中。文件大小越大,将生成更多的“部分”文件。因此,不可能写入单个文件。如果是part-00,则可以在完成后重命名文件。
在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))