如何在Spark中计算执行者之间的指标

问题描述 投票:0回答:1

我有一个火花执行程序,其中有许多执行程序。

我希望能够使用执行器上的计数器来计算事件发生的次数。例如,计算“列”列为10的次数。

df.map(df => if(df.get("column")==10){ counter.inc } ; df)

我最终希望总数为所有执行者的总和。这可能吗?

[当我们从Spark驱动程序报告指标时,我们扩展org.apache.spark.metrics.source.Source并将其注册到spark环境中。这些指标可以用于执行者吗?

apache-spark spark-streaming
1个回答
0
投票

我认为最好的方法是使用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()
© www.soinside.com 2019 - 2024. All rights reserved.