将CSV从Kafka发送到Spark Streaming

时间:2017-05-01 11:08:17

标签: python csv apache-spark streaming apache-kafka

我试图将kafka的csv文件发送到火花流媒体应用程序,我不知道该怎么做。我在这里看过很多帖子,但没有人帮助我。

我希望我的kafka制作人发送csv并稍后在应用程序(消费者)中将其拆分,但这并不重要。我试图创建一个RDD并将其发送给spark。 这适用于普通的字符串消息,但它不适用于csv

这是我的制片人:

message =sc.textFile("/home/guest/host/Seeds.csv")      
producer.send('test', message)

我的火花消费者:

ssc = StreamingContext(sc, 5)

kvs = KafkaUtils.createStream(ssc, "localhost:2181", "spark-streaming-consumer", {'test': 1}) data = kvs.map(lambda x: x[1]) counts = data.flatMap(lambda line: line.split(";")) \

.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a+b)

问题在于,通过发送csv,火花流不会收到任何事件。 有人可以帮我提供格式或概念吗?

我在一个带有python的笔记本中运行生产者和消费者在docker容器下运行。

谢谢。

1 个答案:

答案 0 :(得分:1)

在你的制作人中,message是一个RDD(跨群集分布的csv文件行的集合),它被懒惰地评估,即在你对它执行操作之前它不会做任何事情。所以你需要在发送给Kafka之前收集RDD。 请看下面的链接。 how to properly use pyspark to send data to kafka broker?