如何使用sparkListener在没有操作的情况下记录不同数据帧的记录计数?

时间:2019-09-11 13:21:33

标签: apache-spark

需要在写入后知道数据帧的计数而无需调用其他操作

我知道使用Spark监听器,我们可以像下面这样计算。但是下面的代码被要求完成所有任务。说我有dataframe1和dataframe 2 调用每个任务onTaskEnd的两个数据帧写入。所以我需要一个标志来分隔对dataframe1和datafarme2的调用以增加计数器。

    var dataFrame_1_counter = 0L
    var dataFrame_2_counter = 0L

sparkSession.sparkContext.addSparkListener(new SparkListener(){

 override def onTaskEnd(taskEnd: SparkListenerTaskEnd) {
             synchronized {
               if(`isDataFrame1Call`){ // any way for isDataFrame1Call?
               dataFrame_1_counter += taskEnd.taskMetrics.outputMetrics.recordsWritten
               }else{
                 dataFrame_2_counter += taskEnd.taskMetrics.outputMetrics.recordsWritten  
               }
             }
           }

需要isDataFrame1Call标志。有什么办法吗?

1 个答案:

答案 0 :(得分:0)

这通过为spark中的每个线程使用作业组设置来解决