类型错误:'JavaPackage'对象不可调用。

3

我尝试使用Spark Streaming和Python运行单词计数示例,但出现以下错误。

不确定如何处理。下面是我正在运行的命令和错误信息。

  /opt/spark/bin/spark-submit --jars spark-streaming_2.10-2.0.0.jar test_kafka.py broker.txt "localhost:2181:MyTopic"

Error:  
  Traceback (most recent call last):
      File "/home/ubuntu/kafka/libs/test_kafka.py", line 21, in <module>
        kvs = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers})
      File "/opt/spark/python/lib/pyspark.zip/pyspark/streaming/kafka.py", line 122, in createDirectStream
      File "/opt/spark/python/lib/pyspark.zip/pyspark/streaming/kafka.py", line 195, in _get_helper
    TypeError: 'JavaPackage' object is not callable

你可能错过了一些import语句。我在pyspark中也遇到了类似的问题。https://dev59.com/BZbfa4cB1Zd3GeqP0vCw - Himaprasoon
1个回答

0

你遇到的错误是由于你使用的jar包与你的spark/kafka版本不匹配,导致程序崩溃。

我刚刚检查了最新的spark(2.4.4)和最新的kafka,以下命令可以正常运行:

`--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2`

所以尝试以下命令:

/opt/spark/bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2 test_kafka.py broker.txt "localhost:2181:MyTopic"

问题是如何每次选择正确的包。

包的格式应为:

groupId:artifactId:version

在上面的示例中:

groupId:始终为org.apache.spark

artifactId:从Spark文档中获取最新版本。在这种情况下,我选择了spark-streaming-kafka-0-8_2.11

version:Spark版本。这里我选择了2.0.2。虽然不是最新版本,但它与我正在使用的Spark版本2.4.4具有向后兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接