我想计算某种类型的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的数量?
答案 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())