如何在PySpark中创建kafka流?

时间:2018-07-16 18:50:37

标签: python apache-spark pyspark apache-kafka

我正在尝试创建一个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,但是没有用。

您知道我在做什么错吗? 谢谢。

1 个答案:

答案 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

希望这会对您有所帮助。