首页 > 解决方案 > 没有注册输出操作,所以在 PySpark 中没有执行任何操作

问题描述

我正在尝试将 Spark 与 Kafka 集成。我让 kafka 消费者有 json 数据。我想将 kafka 消费者与 Spark 结合起来进行处理。当我运行下面的代码错误是抛出。

bin\spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.0 test.py localhost:9092 maktest

我的 test.py 在下面

import sys
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
if __name__ == "__main__":
    sc = SparkContext(appName="PythonStreamingDirectKafkaWordCount")
    ssc = StreamingContext(sc, 2)
    brokers, topic = sys.argv[1:]
    kvs = KafkaUtils.createDirectStream(ssc,[topic],{"metadata.broker.list": brokers})
    lines = kvs.map(lambda x: x[1])
    print (lines)
    ssc.start()
    ssc.awaitTermination()

我得到了下面的错误

18/12/10 16:41:40 INFO VerifiableProperties: Verifying properties
18/12/10 16:41:40 INFO VerifiableProperties: Property group.id is overridden to
18/12/10 16:41:40 INFO VerifiableProperties: Property zookeeper.connect is overridden to
<pyspark.streaming.kafka.KafkaTransformedDStream object at 0x000002A6DA9FE6A0>
18/12/10 16:41:40 ERROR StreamingContext: Error starting the context, marking it as stopped
java.lang.IllegalArgumentException: requirement failed: No output operations registered, so nothing to execute
        at scala.Predef$.require(Predef.scala:224)


Traceback (most recent call last):
  File "C:/Users/maws/Desktop/spark-2.2.1-bin-hadoop2.7/test.py", line 12, in <module>
    ssc.start()

py4j.protocol.Py4JJavaError: An error occurred while calling o25.start.
: java.lang.IllegalArgumentException: requirement failed: No output operations registered, so nothing to execute

标签: pythonapache-sparkpysparkapache-kafka

解决方案


您没有使用受支持的Spark Streaming DStream 输出操作

对于 pyspark API,您应该使用:

pprint()
saveAsTextFiles(prefix, [suffix])
saveAsObjectFiles(prefix, [suffix])
saveAsHadoopFiles(prefix, [suffix])
foreachRDD(func)

print()不能与 pyspark 一起使用,因此请确保在检查其他 Spark Streaming Examples for Scala 或 Java 时,更改为pprint()


推荐阅读