【发布时间】:2015-07-09 17:45:06
【问题描述】:
在 Spark 1.3.0 中对 DataFrame 重新分区后,保存到 Amazon 的 S3 时出现 .parquet 异常>.
logsForDate
.repartition(10)
.saveAsParquetFile(destination) // <-- Exception here
我收到的异常是:
java.io.IOException: The file being written is in an invalid state. Probably caused by an error thrown previously. Current state: COLUMN
at parquet.hadoop.ParquetFileWriter$STATE.error(ParquetFileWriter.java:137)
at parquet.hadoop.ParquetFileWriter$STATE.startBlock(ParquetFileWriter.java:129)
at parquet.hadoop.ParquetFileWriter.startBlock(ParquetFileWriter.java:173)
at parquet.hadoop.InternalParquetRecordWriter.flushRowGroupToStore(InternalParquetRecordWriter.java:152)
at parquet.hadoop.InternalParquetRecordWriter.close(InternalParquetRecordWriter.java:112)
at parquet.hadoop.ParquetRecordWriter.close(ParquetRecordWriter.java:73)
at org.apache.spark.sql.parquet.ParquetRelation2.org$apache$spark$sql$parquet$ParquetRelation2$$writeShard$1(newParquet.scala:635)
at org.apache.spark.sql.parquet.ParquetRelation2$$anonfun$insert$2.apply(newParquet.scala:649)
at org.apache.spark.sql.parquet.ParquetRelation2$$anonfun$insert$2.apply(newParquet.scala:649)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
at org.apache.spark.scheduler.Task.run(Task.scala:64)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
我想知道是什么问题以及如何解决。
【问题讨论】:
-
您是每次还是有时都会收到错误消息?您是否也为较小的文件获得它?您是否也只能在 S3 或其他文件系统上获得它?你试过 Apache Spark 1.3.1 吗? Its release notes 提及一些与 Parquet 相关的修复。
-
在超过特定文件大小工作时,我总是收到错误消息。我只试过S3。我试过 1.3.0.d.
-
我能够在 EMR 上使用 Spark 1.3.1 重现此错误,并写入 S3。使用旧的 Parquet api (sqlContext.setConf("spark.sql.parquet.useDataSourceApi", "false")) 没有帮助。写入 HDFS 工作正常。
-
您是否尝试过在 us-west-1 区域使用存储桶?或使用 emfrs
-
@Interfector 我们可以解决这个问题。我有同样的问题
标签: apache-spark parquet