【发布时间】:2019-11-26 11:27:14
【问题描述】:
我们在尝试将 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
我们也尝试过使用future library https://pypi.org/project/past/,但没有任何运气。
Python:3.6 派斯帕克:2.4 卡夫卡:2.1.0
【问题讨论】:
-
你试过
float(offset[1])吗? -
是的@flo 也尝试过,但没有运气
标签: python python-3.x pyspark apache-kafka