【问题标题】:Pyspark-Kafka java.lang.ClassCastExceptionPyspark-Kafka java.lang.ClassCastException
【发布时间】: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


【解决方案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

【讨论】:

  • 感谢您解决了传递相应 jar 的问题。
猜你喜欢
  • 2018-07-31
  • 2017-10-21
  • 2022-10-26
  • 2019-03-11
  • 2018-07-06
  • 2021-09-14
  • 1970-01-01
  • 2018-09-26
  • 2019-05-13
相关资源
最近更新 更多