我正在使用具有以下依赖关系的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)
有人可以帮忙解决此问题