[英]Pyspark writing to minio (s3) partitioned fails
我正在使用 pyspark 3.1.2 將文件寫入 Minio S3。 我正在使用分區,因此數據應存儲在 batch_id 中,例如:
s3a://0001/transactions/batch_id=1 s3a://0001/transactions/batch_id=2 等等。
寫入本地文件系統時一切正常。
但是,當我將 S3 與分區提交程序一起使用時( https://hadoop.apache.org/docs/r3.1.1/hadoop-aws/tools/hadoop-aws/committers.ZFC35FDC70D5FC69DE38 )
帶選項:“partitionOverwriteMode”=“static” 例如: data_frame.write.mode("overwrite").partitionBy("batch_id").orc(output_path)
包括“事務”在內的整個路徑都被覆蓋(而不是只覆蓋給定的分區)。
設置:
spark_session.sparkContext._jsc.hadoopConfiguration().set(
"fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem"
)
spark_session.sparkContext._jsc.hadoopConfiguration().set(
"fs.s3a.path.style.access", "true"
)
spark_session.sparkContext._jsc.hadoopConfiguration().set(
"fs.s3a.committer.magic.enabled", "true"
)
spark_session.sparkContext._jsc.hadoopConfiguration().set(
"fs.s3a.committer.name", "partitioned"
)
spark_session.sparkContext._jsc.hadoopConfiguration().set(
"fs.s3a.committer.staging.conflict-mode", "replace"
)
spark_session.sparkContext._jsc.hadoopConfiguration().set(
"fs.s3a.committer.staging.abort.pending.uploads", "true"
)
所以我添加了更多的jars:
spark-hadoop-cloud_2.13-3.2.0.jar
並遵循火花雲集成指南:[(https://spark.apache.org/docs/latest/cloud-integration.html)][1]
歸結為添加:
"spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", "2"
"spark.sql.sources.commitProtocolClass", "org.apache.spark.internal.io.cloud.PathOutputCommitProtocol"
"spark.sql.parquet.output.committer.class", "org.apache.spark.internal.io.cloud.BindingParquetOutputCommitter"
並切換回鑲木地板。 現在我可以在不覆蓋孔路徑的情況下覆蓋分區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.