Spark accumulators
是一种获取有关RDD上操作的有用信息的好方法。
我的问题如下:我想在两个数据集之间执行联接,例如events
和items
(其中事件是唯一的并涉及项,并且两者都由item_id
为主的items
键入)
这是可行的:
val joinedRDD = events.leftOuterJoin(items)
知道多少个事件没有匹配项的一种可能方法是:
val numMissingItems = joinedRDD.map(x => if (x._2._2.isDefined) 0 else 1).sum
我的问题是:有没有办法通过累加器获得此计数?我不想只是为了计算而通过RDD。
最佳答案
实际上,您可以使用cogroup
签名,然后自行执行leftOuterJoin
执行的逻辑,在不匹配的情况下增加累加器。但是,需要注意的重要一点是,由于这是一个转换,因此累加器有可能(例如,通常不会增加很多)对记录的数量进行过多计数(例如,如果任务失败/重新计算)。如果可以接受,则取决于您。
关于scala - 如何使用累加器对leftOuterJoin中没有匹配项的记录进行计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125015/