Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用foreachRDD和paho将PySpark结果发送到MQTT代理_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 使用foreachRDD和paho将PySpark结果发送到MQTT代理

Apache spark 使用foreachRDD和paho将PySpark结果发送到MQTT代理,apache-spark,pyspark,Apache Spark,Pyspark,我试图将带有计算结果的数据流发送到MQTT代理,但foreachRDD不断崩溃 我使用Bahir运行Spark 2.4.3,用于从git master编译的MQTT subscribe。到目前为止,一切正常。在尝试使用MQTT发布结果之前,我尝试了saveAsFiles(),这很有效(但并不完全是我想要的) def sendPartition(部分): #用于在此处使用MQTT发布的代码 返回0 mydstream=MQTTUtils.createStream(ssc、brokerUrl、to

我试图将带有计算结果的数据流发送到MQTT代理,但foreachRDD不断崩溃

我使用Bahir运行Spark 2.4.3,用于从git master编译的MQTT subscribe。到目前为止,一切正常。在尝试使用MQTT发布结果之前,我尝试了saveAsFiles(),这很有效(但并不完全是我想要的)


def sendPartition(部分):
#用于在此处使用MQTT发布的代码
返回0
mydstream=MQTTUtils.createStream(ssc、brokerUrl、topic)
mydstream=packets.map(更改_格式)\
.map(lambda mac:(mac,1))\
.还原基(λa,b:a+b)
mydstream.foreachRDD(lambda-rdd:rdd.foreachPartition(sendPartition))#第56行
我得到的结果错误如下:

org.apache.spark.SparkException: An exception was raised by Python:
Traceback (most recent call last):
  File "/SPARK_HOME/python/lib/pyspark.zip/pyspark/streaming/util.py", line 68, in call
    r = self.func(t, *rdds)
  File "/SPARK_HOME/python/lib/pyspark.zip/pyspark/streaming/dstream.py", line 161, in <lambda>
    func = lambda t, rdd: old_func(rdd)
  File "/path/to/my/code.py", line 56, in <lambda>
    mydstream.foreachRDD(lambda rdd: rdd.foreachPartition(sendPartition))
  File "/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py", line 806, in foreachPartition
    self.mapPartitions(func).count()  # Force evaluation
  File "/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py", line 1055, in count
    return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum()
  File "/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py", line 1046, in sum
    return self.mapPartitions(lambda x: [sum(x)]).fold(0, operator.add)
  File "/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py", line 917, in fold
    vals = self.mapPartitions(func).collect()
  File "/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py", line 816, in collect
    sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd())
  File "/SPARK_HOME/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/SPARK_HOME/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.: java.lang.IllegalArgumentException: Unsupported class file major version 55

org.apache.spark.SparkException:Python引发了一个异常:
回溯(最近一次呼叫最后一次):
文件“/SPARK_HOME/python/lib/pyspark.zip/pyspark/streaming/util.py”,第68行,在调用中
r=self.func(t,*rdds)
文件“/SPARK_HOME/python/lib/pyspark.zip/pyspark/streaming/dstream.py”,第161行,在
func=lambda t,rdd:old_func(rdd)
文件“/path/to/my/code.py”,第56行,在
mydstream.foreachRDD(lambda-rdd:rdd.foreachPartition(sendPartition))
文件“/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py”,第806行,在foreachPartition中
self.mapPartitions(func.count()#强制求值
文件“/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py”,第1055行,计数
返回self.mapPartitions(lambda i:[sum(i中的u为1)]).sum()
文件“/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py”,第1046行,总计
返回self.mapPartitions(lambda x:[求和(x)]).fold(0,运算符.add)
文件“/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py”,第917行,折叠
vals=self.mapPartitions(func.collect())
collect中的文件“/SPARK_HOME/python/lib/pyspark.zip/pyspark/rdd.py”,第816行
sock\u info=self.ctx.\u jvm.PythonRDD.collectAndServe(self.\u jrdd.rdd())
文件“/SPARK_HOME/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第1257行,在__
回答,self.gateway\u客户端,self.target\u id,self.name)
文件“/SPARK_HOME/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py”,第328行,在get_return_值中
格式(目标id,“.”,名称),值)
py4j.protocol.Py4JJavaError:调用z:org.apache.spark.api.python.PythonRDD.collectAndServe时出错:java.lang.IllegalArgumentException:不支持的类文件主版本55

下面有很多java错误,但我怀疑错误在我的代码中。

您能够运行其他Spark命令吗?在堆栈跟踪的末尾,您会看到
java.lang.IllegalArgumentException:Unsupported类文件主版本55
。这表示您正在不受支持的Java版本上运行Spark


Spark还不能与Java11兼容(我想是由于Scala的限制)。尝试将spark配置为使用Java8。具体情况会因您所处的平台而异。您可能需要安装Java 8,并将
Java\u HOME
环境变量更改为指向新安装。

谢谢。我刚刚更改了其他一些需要Java11的软件的Java版本,但忘记了将其更改回来。它现在可以工作了(使用Java8)