我需要一些帮助来从数据帧创建镶木地板文件,因为写入时会在单独的目录中创建多个文件: Databricks Python 代码:
mounted_directory_path = "/mnt/myContainer/MyFolder/"
file_list = dbutils.fs.ls(mounted_directory_path)
def insertFirstLineInFile(file_path):
try:
header = ["Model" , "SerialNumber" .....]
my_df = spark.read.format("csv").option("inferSchema","false").option("sep",",").option("header","false").load(file_path)
my_df = my_df.toDF(*header)
# Extract the filename from file_info.path
filename = os.path.basename(file_path)
# rename original filename .csv to .parquet
if filename.endswith(".csv"):
# Replace ".csv" with ".parquet"
filename = filename[:-4] + ".parquet"
OutputFile = OutputDirectory + filename
print("Filename:", OutputFile)
# partition to single file
my_df_single_partition = my_df.coalesce(1)
my_df_single_partition.write.option("header", "true").parquet(OutputFile)
except Exception as e:
print(f"Error reading {file_path}: {str(e)}")
for file_info in file_list:
insertFirstLineInFile(file_info.path)
有没有一种更干净的方法,而不是复制并重命名 .parquet、上移一级并删除包含 4 个文件的文件夹。
非常感谢您的帮助。
通常不建议更改或删除由 DBIO 事务协议创建的那些文件,如 @funmatters 提到的。
但是,您可以通过关闭此处回答的多个设置来防止创建这些内容:https://community.databricks.com/t5/data-engineering/how-do-i-prevent-success-and-comfilled-文件在我的写入输出/td-p/28690
- 我们可以使用
禁用spark parquet write的事务日志。这将有助于禁用“已提交”和“已启动”文件,但仍会生成 _SUCCESS、_common_metadata 和 _metadata 文件。spark.sql.sources.commitProtocolClass=org.apache.spark.sql.execution.datasources.SQLHadoopMapReduceCommitProtocol
- 我们可以使用
禁用 _common_metadata 和 _metadata 文件parquet.enable.summary-metadata=false
- 我们还可以使用
禁用 _SUCCESS 文件mapreduce.fileoutputcommitter.marksuccessfuljobs=false