Spark Streaming - DStream没有distinct()

时间:2015-09-14 21:06:40

标签: apache-spark spark-streaming

我想计算某种类型的ID的不同值,表示为RDD。

在非流媒体案例中,它相当简单。假设IDs是从平面文件读取的ID的RDD。

    print ("number of unique IDs %d" %  (IDs.distinct().count()))

但我似乎无法在流媒体案例中做同样的事情。假设我们streamIDs是从网络中读取的DStream个ID。

    print ("number of unique IDs from stream %d" %  (streamIDs.distinct().count()))

给我这个错误

AttributeError: 'TransformedDStream' object has no attribute 'distinct'

我做错了什么?如何打印出在此批次中显示的不同ID的数量?

2 个答案:

答案 0 :(得分:8)

使用RDD,您只有一个结果,但使用DStreams,您会得到一系列结果,每个微批次都有一个结果。因此,您无法一次打印唯一ID的数量,而是必须注册一个操作来打印每个微批次的唯一ID,这是一个可以使用不同的RDD:

streamIDs.foreachRDD(rdd => println(rdd.distinct().count()))

请记住,您可以使用window创建更大批量的已转换dstream:

streamIDs.window(Duration(1000)).foreachRDD(rdd => println(rdd.distinct().count()))

答案 1 :(得分:-1)

您是否尝试过使用:

yourDStream.transform(r => r.distinct())