這是我想保存為 csv 的 spark DataFrame。
type(MyDataFrame)
--Output: <class 'pyspark.sql.dataframe.DataFrame'>
要將其保存為 CSV,我有以下代碼:
MyDataFrame.write.csv(csv_path, mode = 'overwrite', header = 'true')
當我保存這個時,檔案名是這樣的:
part-0000-766dfdf-78fg-aa44-as3434rdfgfg-c000.csv
有沒有辦法在保存它的同時給它一個自定義名稱?像“MyDataFrame.csv”
uj5u.com熱心網友回復:
不,這就是 Spark 的作業方式(至少目前是這樣)。你必須MyDataFrame.csv作為一個目錄名和該目錄下,你必須使用相同的格式為多個檔案part-0000-766dfdf-78fg-aa44-as3434rdfgfg-c000.csv,part-0000-766dfdf-78fg-aa44-as3434rdfgfg-c001.csv等
不推薦這樣做,但如果您的資料足夠小(可以說是這里的“足夠小”),您可以隨時將其轉換為 Pandas 并將其保存為一個您想要的任何名稱的 CSV 檔案。
uj5u.com熱心網友回復:
我也有同樣的需求,可以寫一個路徑,然后改檔案路徑。這是我的解決方案。
def write_to_hdfs_specify_path(df, spark, hdfs_path, file_name):
"""
:param df: dataframe which you want to save
:param spark: sparkSession
:param hdfs_path: target path(shoul be not exises)
:param file_name: csv file name
:return:
"""
sc = spark.sparkContext
Path = sc._gateway.jvm.org.apache.hadoop.fs.Path
FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem
Configuration = sc._gateway.jvm.org.apache.hadoop.conf.Configuration
df.coalesce(1).write.option("header", True).option("delimiter", "|").option("compression", "none").csv(hdfs_path)
fs = FileSystem.get(Configuration())
file = fs.globStatus(Path("%s/part*" % hdfs_path))[0].getPath().getName()
full_path = "%s/%s" % (hdfs_path, file_name)
result = fs.rename(Path("%s/%s" % (hdfs_path, file)), Path(full_path))
return result
uj5u.com熱心網友回復:
.coalesce(1)將保證只有 1 個檔案但不保證檔案名。請使用一些臨時目錄來保存它,然后重命名并復制(如果您使用 databricks 或使用 Hadoop API 中的 FileUtil,則使用 dbutils.fs 函式)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330066.html
