scala - 如何使用累加器对leftOuterJoin中没有匹配项的记录进行计数?

标签 scala join apache-spark accumulator

Spark accumulators是一种获取有关RDD上操作的有用信息的好方法。

我的问题如下:我想在两个数据集之间执行联接,例如eventsitems(其中事件是唯一的并涉及项,并且两者都由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/

相关文章:

scala - 将 DStream 与动态数据集连接

scala - 如何在 akka 中使用 "ask"作为三个值

MySQL 连接返回从另一个表链接的不同 ID

java - ApacheSpark从http来源(例如csv等)读取数据帧

apache-spark - Spark 2-使用IntelliJ从本地设置特定的 “*-site.xml”或类路径

scala - SBT Scala 汇编插件

Scala DSL - 函数对象的隐式方法

mysql - 如何构建这个复杂的sql?

python - 如何将数据框加入自身,创建组内的所有组合

regex - 在 Spark RDD 中使用正则表达式从字符串中提取时间戳