[英]Renaming spark output csv in azure blob storage
我有一個 Databricks 筆記本設置,其工作方式如下;
我的問題是,您無法命名文件輸出文件,我需要一個靜態 csv 文件名。
有沒有辦法在pyspark中重命名它?
## Blob Storage account information
storage_account_name = ""
storage_account_access_key = ""
## File location and File type
file_location = "path/.blob.core.windows.net/Databricks_Files/input"
file_location_new = "path/.blob.core.windows.net/Databricks_Files/out"
file_type = "csv"
## Connection string to connect to blob storage
spark.conf.set(
"fs.azure.account.key."+storage_account_name+".blob.core.windows.net",
storage_account_access_key)
數據轉換后輸出文件
dfspark.coalesce(1).write.format('com.databricks.spark.csv') \
.mode('overwrite').option("header", "true").save(file_location_new)
然后將文件寫為“part-00000-tid-336943946930983.....csv”
目標是擁有“Output.csv”
我看到的另一種方法只是在 python 中重新創建它,但在文檔中還沒有遇到如何將文件輸出回 blob 存儲的方法。
我知道從 Blob 存儲中檢索的方法是.get_blob_to_path via microsoft.docs
非常感謝這里的任何幫助。
Hadoop/Spark 會將每個分區的計算結果並行輸出到一個文件中,因此您會在您命名的Output/
HDFS 輸出路徑中看到許多part-<number>-....
文件。
如果你想將一次計算的所有結果輸出到一個文件中,你可以通過命令hadoop fs -getmerge /output1/part* /output2/Output.csv
合並它們,或者像使用coalesce(1)
1
一樣將reduce進程數設置為1 coalesce(1)
功能。
所以在你的場景中,你只需要調整這些函數的調用順序,讓coalease
函數在save
函數的前面被調用,如下。
dfspark.write.format('com.databricks.spark.csv') \
.mode('overwrite').option("header", "true").coalesce(1).save(file_location_new)
coalesce
和repartition
無助於將數據幀保存到 1 個正常命名的文件中。
我最終只是重命名了 1 個 csv 文件並刪除了帶有日志的文件夾:
def save_csv(df, location, filename):
outputPath = os.path.join(location, filename + '_temp.csv')
df.repartition(1).write.format("com.databricks.spark.csv").mode("overwrite").options(header="true", inferSchema="true").option("delimiter", "\t").save(outputPath)
csv_files = os.listdir(os.path.join('/dbfs', outputPath))
# moving the parquet-like temp csv file into normally named one
for file in csv_files:
if file[-4:] == '.csv':
dbutils.fs.mv(os.path.join(outputPath,file) , os.path.join(location, filename))
dbutils.fs.rm(outputPath, True)
# using save_csv
save_csv_location = 'mnt/.....'
save_csv(df, save_csv_location, 'name.csv')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.