我正在尝试创建一个kafka流,然后对其进行一些转换,但是看来我创建的流为null。我将文本文件加载到生产者中,然后通过消费者使用它,它可以正常工作,但不会创建kafka流。 输入的文本文件如下所示,包含36000个条目:
10.000000
26.000000
-8.000000
-28.000000
...
我的python代码是:
sc = SparkContext(appName="STALTA")
ssc = StreamingContext(sc, 2)
broker, topic = sys.argv[1:]
kvs = KafkaUtils.createStream(ssc, broker, "raw-event-streaming-consumer",{topic:1})
rdd = kvs.flatMap(lambda line: line.strip().split("\n")).map(lambda strelem: float(strelem))
print("****** ", rdd.count())
ssc.start()
ssc.awaitTermination()
rdd.count()
应该打印36000,但它是空的。
运行脚本的命令如下:
bin/spark-submit --jars jars/spark-streaming-kafka-0-8-assembly_2.11-2.3.1.jar examples/src/main/python/streaming/sparkkafka.py localhost:2181 consumer6
我也尝试了localhost:9092,但是没有用。
您知道我在做什么错吗? 谢谢。
答案 0 :(得分:0)
我认为您应该将代理更改为Zookeeper IP,通常为localhost:2181
,因为它需要Zookeeper IP而不是kafka IP。
对于要打印DStream
的问题,您可以直接用kvs.pprint()
打印,通常它将打印成类似rdd的音符。不要使用sparkstreaming无法识别为输出命令的print()
来获取这些错误。
Error : java.lang.IllegalArgumentException: requirement failed: No output operations registered, so nothing to execute
希望这会对您有所帮助。