Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 火花流-x27;utf8';编解码器可以';不解码字节_Python_Apache Spark_Pyspark_Spark Streaming - Fatal编程技术网

Python 火花流-x27;utf8';编解码器可以';不解码字节

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行,解码 返回编解

我对流编程相当陌生。我们有使用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行,解码 返回编解码器.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的回答我们使用的是模式注册表,我们不需要在这里指定它吗?