我有一个火花执行程序,其中有许多执行程序。
我希望能够使用执行器上的计数器来计算事件发生的次数。例如,计算“列”列为10的次数。
df.map(df => if(df.get("column")==10){ counter.inc } ; df)
我最终希望总数为所有执行者的总和。这可能吗?
[当我们从Spark驱动程序报告指标时,我们扩展org.apache.spark.metrics.source.Source并将其注册到spark环境中。这些指标可以用于执行者吗?
我认为最好的方法是使用Spark聚合“ sum”。
因此,Spark将在所有节点内部以分布式方式在内部执行聚合,然后将聚集返回给驱动程序。
df.withColumn("count_flag", when(col("column")==10, 1).otherwise(0))
.agg(sum("count_flag") as "Total_Occurance_Of_Column_Value_10")
.show()