簡體   English   中英

Pyspark 寫入 minio (s3) 分區失敗

[英]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.

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