当尝试将Pyspark代码的偏移量传递给Kafka DStream时,我们得到了 CAST EXCEPTION 。
py4j.protocol.Py4JJavaError: An error occurred while calling o2938.createDirectStreamWithMessageHandler.
: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
我们已经从Python 2.7升级到3.6,并且为了进行升级,我们不得不在Offset函数下将 long()更改为int(),在进行更改时,我们得到了CAST异常! !!
kafka_stream = KafkaUtils.createDirectStream(ssc=spark_streaming_ctx,
topics="Test",
kafkaParams={
"BROKER": "BROKER_LIST"),
"auto.offset.reset": "smallest"},
fromOffsets=self.Offset(spark, "TOPIC"),
messageHandler="messageHandler")
def Offset(in_spark, in_topic_list):
offsets_map = {}
offsets_map[Topic] = int(offset[1]) # convert long to int for Python3X
return offsets_map
我们还尝试使用将来的库https://pypi.org/project/past/,但没有运气。
Python:3.6 Pyspark的:2.4 卡夫卡:2.1.0
答案 0 :(得分:1)
如果您使用的是0_10版本的流jar文件,请检查您的spark提交代码。 0_10版本将不支持python。可以使用0_8 Kafka版本代替0_10。
Kafka 0_8版本将接受整数偏移值。
请参考下面的文件。
https://spark.apache.org/docs/2.2.0/streaming-kafka-integration.html