0

我正在本地编写镶木地板文件,并使用客户端将其上传到AvroParquetWriters3 AmazonS3。然后尝试从 Spark 访问它。以下是我的代码:

AvroParquetWriter:

try (ParquetWriter< MyData > writer = AvroParquetWriter.<MyData>builder("/tmp/file.parquet")
                .withSchema(ReflectData.AllowNull.get().getSchema(MyData.class))
                .withDataModel(ReflectData.get())
                .withConf(new Configuration())
                .withWriteMode(OVERWRITE)
                .build()) {
                writer.write(myData);
        }

上传到 s3:

 s3client.putObject(bucketName, "path/file.parquet", new File("/tmp/file.parquet"));

从 Spark 中读取:

df = spark.read.parquet("s3://bucketname/path/file.parquet")

从 Spark 读取镶木地板文件时,出现以下异常:

调用 o379.parquet 时出错。:org.apache.spark.SparkException:作业因阶段失败而中止:阶段 3.0 中的任务 0 失败 4 次,最近一次失败:阶段 3.0 中丢失任务 0.3(TID 15,ip-10-110-10-115.ec2 .internal, executor 7): org.apache.spark.SparkException: 在 awaitResult 中抛出异常: at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:226) at org.apache.spark.util.ThreadUtils $.parmap(ThreadUtils.scala:290) at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.readParquetFootersInParallel(ParquetFileFormat.scala:538) at org.apache.spark.sql.execution.datasources.parquet .ParquetFileFormat$$anonfun$9.apply(ParquetFileFormat.scala:611) at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$$anonfun$9.apply(ParquetFileFormat.scala:原因:java.io.IOException:无法读取文件的页脚:FileStatus{path=s3://bucketname/path/file.parquet; 是目录=假;长度=3920;复制=0;块大小=0;修改时间=0;访问时间=0;所有者=; 组=; 权限=rw-rw-rw-; isSymlink=false} 在 org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$$anonfun$readParquetFootersInParallel$1.apply(ParquetFileFormat.scala:551) at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$$anonfun$ readParquetFootersInParallel$1.apply(ParquetFileFormat.scala:538) at org.apache.spark.util.ThreadUtils$$anonfun$3$$anonfun$apply$1.apply(ThreadUtils.scala:287) at scala.concurrent.impl.Future$PromiseCompletingRunnable .liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121) at scala .concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 在 scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:第1339章 scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 引起:java.lang.RuntimeException: s3://bucketname/path/file.parquet 不是 Parquet 文件。尾部的预期幻数 [80, 65, 82, 49] 但 在 org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:524) 的 org.apache 中找到 [120, 57, -43, 112]。 parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:505) at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:499) at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java: 476) 在 org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$$anonfun$readParquetFootersInParallel$1.apply(ParquetFileFormat.scala:544) ... 还有 9 个

请帮我解决这个问题。

谢谢

4

0 回答 0