Spark 流式传输 - 原因:org.apache.parquet.io.ParquetDecodingException:无法读取文件中块 0 中 1 处的值

Spark streaming - Caused by: org.apache.parquet.io.ParquetDecodingException: Can not read value at 1 in block 0 in file

我正在使用 spark 将我的 json 数据写入 s3。但是,我不断收到以下错误。 我们正在使用 apache hudi 进行更新。这只发生在某些数据上,其他一切正常。

Caused by: org.apache.parquet.io.ParquetDecodingException: Can not read value at 1 in block 0 
 in file s3a://<path to parquet file>
at org.apache.parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.ja va:251)

App > at org.apache.parquet.hadoop.ParquetReader.read(ParquetReader.java:132)

App > at org.apache.parquet.hadoop.ParquetReader.read(ParquetReader.java:136)

 App > at com.uber.hoodie.func.ParquetReaderIterator.hasNext(ParquetReaderIterator.java:45)

App > at com.uber.hoodie.common.util.queue.IteratorBasedQueueProducer.produce(IteratorBasedQueueProducer.java:44)

App > at com.uber.hoodie.common.util.queue.BoundedInMemoryExecutor.lambda$null[=11=](BoundedInMemoryExecutor.java:94)

App > at java.util.concurrent.FutureTask.run(FutureTask.java:266)

 App > at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

App > ... 4 more

App > Caused by: java.lang.UnsupportedOperationException:org.apache.parquet.avro.AvroConverters$FieldLongConverter

我无法理解。我关注了几个线程并在我的 spark confs 中设置了 --conf "spark.sql.parquet.writeLegacyFormat=true" 。但即使这样也无济于事。

发现问题。问题在于现有镶木地板文件和传入数据中的模式不匹配。 其中一个字段是现有镶木地板模式中的字符串,并且它在较新的数据块中被发送了很长时间。