Apache Avro Parquet java.lang.NoSuchFieldError: NULL_VALUE



我已经被困3天了。我正试图阅读与Apache Avro拼花文件。我只是从文件列表中读取一个文件,然后迭代直到所有文件都完成。

代码在自己的scala文件中工作得很好,但是,我怀疑它可能与依赖关系和我包含的外部库有关。

有其他人有类似的错误,并能够解决这个问题吗?

代码
override def generateData(): Option[GenericRecord] = {
val conf: Configuration = new Configuration()
conf.setBoolean(AvroReadSupport.AVRO_COMPATIBILITY, true)
if (filePaths.size == 0){
dataSourceComplete()
None
} else {
x += 1
var line = parquetReader.read()
if (line == null){
println(x)
val nextFile = filePaths.last
filePaths = filePaths.init
println(nextFile)
parquetReader = AvroParquetReader.builder[GenericRecord](HadoopInputFile.fromPath(new Path(nextFile), conf)).withConf(conf).build()
line = parquetReader.read()
}
Some(line)
}
}

误差

Uncaught error from thread [Raphtory-akka.actor.default-dispatcher-17]: NULL_VALUE, shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[Raphtory]
java.lang.NoSuchFieldError: NULL_VALUE
at org.apache.parquet.avro.AvroSchemaConverter.convertFields(AvroSchemaConverter.java:246)
at org.apache.parquet.avro.AvroSchemaConverter.convert(AvroSchemaConverter.java:231)
at org.apache.parquet.avro.AvroReadSupport.prepareForRead(AvroReadSupport.java:130)
at org.apache.parquet.hadoop.InternalParquetRecordReader.initialize(InternalParquetRecordReader.java:183)
at org.apache.parquet.hadoop.ParquetReader.initReader(ParquetReader.java:156)
at org.apache.parquet.hadoop.ParquetReader.read(ParquetReader.java:135)
at com.raphtory.ethereum.spout.EthereumTransactionSpout.generateData(EthereumTransactionSpout.scala:59)

这是我的build.sbt

scalaVersion := "2.12.11"
Compile / unmanagedJars += baseDirectory.value / "lib/raphtory.jar"
val AkkaVersion = "2.6.14"
libraryDependencies ++= Seq(
"com.lightbend.akka" %% "akka-stream-alpakka-avroparquet" % "3.0.3",
"com.typesafe.akka" %% "akka-stream" % AkkaVersion
)

我遇到同样的问题,所以想我。我遇到了着色jar和我的应用程序,因为我发现我正在使用一些与avro版本引入一些冲突的依赖库。因此,我在我的pom.xml中遮蔽avro库-即重命名包,这样它就不会与其他任何内容冲突。

第一件事是添加maven-shade-plugin,它允许你(a)创建一个uber JAR, (b)遮蔽它的内容,更多信息见这里。下面是一个代码片段:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.2</version>

…然后给库添加阴影:

<relocation>
<pattern>org.apache.avro</pattern>
<shadedPattern>[RENAME-HERE].shaded.org.apache.avro</shadedPattern>
</relocation>

相关内容

  • 没有找到相关文章

最新更新