繁体   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