Spark Counter:主要方法/扩展App为同一个应用程序提供不同的输出,为什么会这样?

时间:2018-05-28 08:03:07

标签: scala apache-spark spark-streaming

我有一个文件有一些丢失的数据,所以我试图通过使用计数器变量来识别丢失的记录数。

File: data-error.csv                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
123,200,Abc
124,300,xyz
125,4,
126,abd
127,400,abc1

此文件包含 总无记录= 5且缺少记录= 2

  

计划通过扩展App特征:输出 5 2

object CountersTest extends App{
  val conf=new SparkConf().setAppName("CounterTest").setMaster("local")
  val sc=new SparkContext(conf)

  val fileRDD=sc.textFile("data-error.csv")
  var missingRecords=0

  val rdd1=fileRDD.map(rec=>{
    val parseResult=RecordParser.parse(rec)
    if(parseResult.isLeft) missingRecords+=1
    rec
  })
  println(rdd1.count())
  println(missingRecords)
}
  

程序使用main方法:输出 5 0

object CounterWithMain {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setAppName("CounterTest").setMaster("local")
    val sc=new SparkContext(conf)

    val fileRDD=sc.textFile("data-error.csv")
    var missingRecords=0

    val rdd1=fileRDD.map(rec=>{
      val parseResult=RecordParser.parse(rec)
      if(parseResult.isLeft) missingRecords+=1
      rec
    })
    println(rdd1.count())                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
    println(missingRecords)
  }
}

为什么同样的应用程序提供不同的输出?请帮我解决这个问题。提前致谢。

0 个答案:

没有答案