Pyspark-Kafka java.lang.ClassCastException

时间:2019-07-17 15:09:47

标签: python python-3.x pyspark apache-kafka

当尝试将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

1 个答案:

答案 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