PySpark:在条形图中使用 TransformedDStream

问题描述

我从 Kafak 消费了一些事件,数据如下所示:

-------------------------------------------
Time: 2020-12-21 21:52:58
-------------------------------------------
150.0

-------------------------------------------
Time: 2020-12-21 21:53:00
-------------------------------------------
155.0

-------------------------------------------
Time: 2020-12-21 21:53:02
-------------------------------------------
160.0

生成日志的代码如下所示:

sc = SparkContext(appName='Python Streaming')

ssc = StreamingContext(sc,1) 
ssc.checkpoint("abc")
# create the stream
kvs = KafkaUtils.createStream(ssc,\
          'XXXX:YYYY',\
          'streaming-consumer',\
          {'topic':1})

windows=kvs.window(10,2).map(lambda x: json.loads(x[1])['val'])

#here the avgs are created    
avg=windows.map(lambda x:(x,1)).reduce(lambda x,y:(x[0]+y[0],x[1]+y[1])).map(lambda x:x[0]/x[1])

#creates the log shown above
avg.pprint()

现在,我想要一个微小的(实时)条形图可视化。我通过在 avg=windows.map(lambda x:(x,x[1]+y[1])).map(lambda x:x[0]/x[1]) 之后添加以下两行来尝试这样的事情 - 但是,它不起作用(情节未更新):

avg.foreachRDD(lambda x:myList.append(x.collect()))

sns.barplot(x=myList[-1])

可视化此类流数据的最简单方法是什么?

我正在使用 juypiter notebook 和 python3

解决方法

我认为你应该使用这个数据流 -

源 Kafka 主题 -> 火花流消费者 -> 一些数据库(如 -influx db) -> graphana

仅仅 jupyter notebook 和 python 不足以实现 Spark 流的实时可视化