将文件写入 s3 时出错 - pyspark

Posted

技术标签:

【中文标题】将文件写入 s3 时出错 - pyspark【英文标题】:Errors writing file to s3 - pyspark 【发布时间】:2017-09-26 21:59:40 【问题描述】:

在完成所有处理后尝试将文件写入 s3 时,我遇到了一些奇怪的错误。 我想知道内存分配是否与此有关。 任何建议都会有所帮助。 我在独立模式下运行 Spark 2.1.0。

错误如下:

17/09/26 15:50:27 ERROR Utils: Aborting task
org.apache.spark.SparkException: Python worker exited unexpectedly (crashed)
    at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:230)
    at org.apache.spark.api.python.PythonRunner$$anon$1.next(PythonRDD.scala:156)
    at org.apache.spark.api.python.PythonRunner$$anon$1.next(PythonRDD.scala:152)
    at org.apache.spark.InterruptibleIterator.next(InterruptibleIterator.scala:43)
    at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)

  ....
  Caused by: java.io.EOFException
    at java.io.DataInputStream.readFully(DataInputStream.java:197)
    at java.io.DataInputStream.readFully(DataInputStream.java:169)
    at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:169)
    ... 21 more
17/09/26 15:50:28 ERROR FileFormatWriter: Job job_20170926152633_0010 aborted.
17/09/26 15:50:28 ERROR Executor: Exception in task 270.0 in stage 10.0 (TID 6680)
org.apache.spark.SparkException: Task failed while writing rows
    at 

 org.apache.spark.sql.execution.datasources.FileFormatWriter
  $.org$apache$
  spark$sql$execution$datasources$FileFormatWriter$
   $executeTask(FileFormatWriter.scala:204)
    at 


.FileFormatWriter$$anonfun$write$1$$anonfun$3.\
apply(FileFormatWriter.scala:128)

将文件写入s3的代码如下:

            df.write.format("parquet") \
            .option("x-amz-server-side-encryption", "AES256") \
            .mode("append") \
            .save(s3_path)

【问题讨论】:

你能不能先尝试在没有加密和追加模式的情况下写入 s3 df.write.parquet(s3_path) 检查此链接可能有助于启用加密。 ***.com/questions/45461299/… 【参考方案1】:

我正在使用这种最简单的方式在 S3 上写入文件,所以试试这个。如果你需要这个选项.option("x-amz-server-side-encryption", "AES256")所以你可以添加它。

       df.write.mode("append").parquet(s3_path)

我使用的是 spark 2.0.1 版本。

【讨论】:

【参考方案2】:

我不相信 .option("x-amz-server-side-encryption", "AES256").option() 命令为 DF 编写器任务设置属性,而不是在上传时设置 HTTP 标头。您需要查看 s3 连接器(EMR 或 Apache Hadoop 的)及其设置的文档。

同时,我认为它不会导致崩溃。它会被忽略。

粘贴整个堆栈。

【讨论】:

以上是关于将文件写入 s3 时出错 - pyspark的主要内容,如果未能解决你的问题,请参考以下文章

将增量文件写入 S3 (MinIO) - PySpark 2.4.3

将pyspark数据框写入文本文件

使用 PySpark 将每一行的每一列作为单独的文件写入 S3

使用 pyspark 从 AWS s3 Bucket 读取 csv 时出错

使用 pyspark 从 S3 服务器读取时出错:[java.lang.IllegalArgumentException]

PySpark S3 文件读取性能考虑