java.lang.NoSuchMethodError:org.apache.avro.Schema.getLogicalType()Lorg / apache / avro / LogicalType;使用Avro数据进行结构化流式传输

时间:2019-02-21 16:10:35

标签: apache-spark apache-kafka avro spark-structured-streaming

我正在使用具有以下依赖关系的spark 2.3.1和kafka 0.10, kafka-avro-serializer-3.2.1.jar, kafka-schema-registry-client-3.2.1.jar, avro-1.8.1.jar, spark-avro_2.11-2.4.0.jar, spark-sql-kafka-0-10_2.11-2.4.0.jar, spark-streaming-kafka-0-10_2.11-2.4.0.jar

在2.3中使用2.4库处理结构化流以使用from_avro,如下所示。

import io.confluent.kafka.schemaregistry.client.rest.RestService
import io.confluent.kafka.serializers.KafkaAvroDeserializer
import org.apache.avro.Schema
import org.apache.spark.sql.types._

val jsonFormatSchema = new String(Files.readAllBytes(Paths.get("schema.avsc")))

val rawTopicMessageDF = spark.readStream.format("kafka").option("kafka.bootstrap.servers", brokers).
     option("subscribe", topic).
     option("avroSchema",jsonFormatSchema).
     option("startingOffsets", "latest").
     option("maxOffsetsPerTrigger", 20).load()

val output = rawTopicMessageDF.select(from_avro('value, jsonFormatSchema) as 'user)

当我从rawTopicMessageDF中选择值时,看到以下错误。

java.lang.NoSuchMethodError: org.apache.avro.Schema.getLogicalType()Lorg/apache/avro/LogicalType;
  at org.apache.spark.sql.avro.SchemaConverters$.toSqlTypeHelper(SchemaConverters.scala:51)

有人可以帮忙解决此问题

0 个答案:

没有答案