簡體   English   中英

Spark:如何覆蓋 S3 文件夾上的文件而不是完整的文件夾

[英]Spark: How to overwrite a file on S3 folder and not complete folder

使用 Spark 我正在嘗試將一些數據(以 csv、parquet 格式)推送到 S3 存儲桶。

df.write.mode("OVERWRITE").format("com.databricks.spark.csv").options(nullValue=options['nullValue'], header=options['header'], delimiter=options['delimiter'], quote=options['quote'], escape=options['escape']).save(destination_path)

簡短回答:將 Spark 配置參數spark.sql.sources.partitionOverwriteModedynamic而不是靜態。 這只會覆蓋必要的分區,而不是全部。 PySpark 示例:

conf=SparkConf().setAppName("test).set("spark.sql.sources.partitionOverwriteMode","dynamic").setMaster("yarn")
sc = SparkContext(conf=conf)
sqlContext = sql.SQLContext(sc)

可以先刪除文件,然后使用追加模式插入數據,而不是覆蓋以保留子文件夾。 以下是 Pyspark 的一個示例。

import subprocess
subprocess.call(["hadoop", "fs", "-rm", "{}*.csv.deflate".format(destination_path)])

df.write.mode("append").format("com.databricks.spark.csv").options(nullValue=options['nullValue'], header=options['header'], delimiter=options['delimiter'], quote=options['quote'], escape=options['escape']).save(destination_path)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM