繁体   English   中英

将DataFrame写入LocalStack S3时发生火花错误

[英]Spark Error Writing DataFrame to LocalStack S3

我正在运行LocalStack,并尝试使用以下代码将DataFrame写入S3。

val spark = SparkSession
    .builder()
    .appName("LocalStack Test")
    .master("local[*]")
    .config("spark.hadoop.fs.s3a.endpoint", "http://0.0.0.0:4572")
    .config("fs.s3a.path.style.access", "true")
    .getOrCreate()

val df = spark.sqlContext.read
    .option("header", "true")
    .option("inferSchema", "true")
    .csv("test.csv")

df.write
    .mode(SaveMode.Overwrite)
    .save(s"s3a://test/test2.csv")

这将引发以下异常:

Caused by: com.amazonaws.SdkClientException: Unable to verify integrity of data upload.  Client calculated content hash (contentMD5: 1B2M2Y8AsgTpgAmY7PhCfg== in base 64) didn't match hash (etag: c20aef10d728c21878be739244ab1080 in hex) calculated by Amazon S3.  You may need to delete the data stored in Amazon S3. (metadata.contentMD5: null, md5DigestStream: com.amazonaws.services.s3.internal.MD5DigestCalculatingInputStream@2a6b3577, bucketName: spark, key: test/_temporary/0/)

似乎这是一个最近解决的已知问题,但Spark仍然有麻烦。 创建SparkSession时是否需要设置其他配置选项?

“ spark.hadoop.fs.s3a.endpoint”设置为奇怪...这是本地S3服务器吗?

如果是这样:尝试将s3a强制降为v2签名xml <property> <name>fs.s3a.signing-algorithm</name> <value>AWS3SignerType</value> </property>我不会做出任何保证,只有知道该问题“一旦”消失即可

ps:相对于S3,CSV inferSchema的确非常昂贵,因为完全可以读取文件只是为了确定模式,然后第二次进行计算。 进行一次,打印结果,然后使用该架构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM