Python 火花流-x27;utf8';编解码器可以';不解码字节
我对流编程相当陌生。我们有使用Avro的卡夫卡流 我想连接卡夫卡流和火花流。我用了下面的代码Python 火花流-x27;utf8';编解码器可以';不解码字节,python,apache-spark,pyspark,spark-streaming,Python,Apache Spark,Pyspark,Spark Streaming,我对流编程相当陌生。我们有使用Avro的卡夫卡流 我想连接卡夫卡流和火花流。我用了下面的代码 kvs = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers}) lines = kvs.map(lambda x: x[1]) 我犯了一个错误 返回s.decode('utf-8') 文件“/usr/lib64/python2.7/encodings/utf_8.py”,第16行,解码 返回编解
kvs = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers})
lines = kvs.map(lambda x: x[1])
我犯了一个错误
返回s.decode('utf-8')
文件“/usr/lib64/python2.7/encodings/utf_8.py”,第16行,解码
返回编解码器.utf_8_解码(输入,错误,真)
UnicodeDecodeError:“utf8”编解码器无法解码位置57-58中的字节:无效的连续字节
我是否需要指定卡夫卡使用Avro,是否高于此错误?如果是的话,我怎么能指定呢 对,问题在于流的反序列化。您可以在以下位置使用库并指定valueDecoder:
from confluent_kafka.avro.cached_schema_registry_client import CachedSchemaRegistryClient`
from confluent_kafka.avro.serializer.message_serializer import MessageSerializer
kvs = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers}, valueDecoder=MessageSerializer.decode_message)`
对于的解决方案,问题在于流的反序列化。您可以在以下位置使用库并指定valueDecoder:
from confluent_kafka.avro.cached_schema_registry_client import CachedSchemaRegistryClient`
from confluent_kafka.avro.serializer.message_serializer import MessageSerializer
kvs = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers}, valueDecoder=MessageSerializer.decode_message)`
解决方案的积分为是,您应该指定它 使用java: 创建流:
final JavaInputDStream<ConsumerRecord<String, avroType>> stream =
KafkaUtils.createDirectStream(
jssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.Subscribe(topics, kafkaParams));
是的,你应该指定它 使用java: 创建流:
final JavaInputDStream<ConsumerRecord<String, avroType>> stream =
KafkaUtils.createDirectStream(
jssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.Subscribe(topics, kafkaParams));
Hi Lev G,我认为您的答案是正确的,但在进行更改后,我出现了另一个错误。但是,我将serializer.decode_消息更改为MessageSerializer.decode_消息。可以吗?新错误:对,我修复了我的答案-应该是MessageSerializer。请接受回答在Kafka中,我们正在使用架构注册表,是否需要在此处指定它?Hi Lev G,我认为您的答案是正确的,但在进行更改后,我遇到另一个错误。但是,我将serializer.decode_消息更改为MessageSerializer.decode_消息。可以吗?新错误:对,我修复了我的答案-应该是MessageSerializer。请接受Kafka的回答我们使用的是模式注册表,我们不需要在这里指定它吗?