从Spark Scala中的txt或csv文件读取时从csv中删除标头

时间:2019-11-04 08:18:17

标签: scala apache-spark

我正在尝试从给定的输入文件中删除标题。但是我做不到。 这就是我写的。有人可以帮我如何从txt或csv文件中删除标题。

import org.apache.spark.{SparkConf, SparkContext}

object SalesAmount {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName(getClass.getName).setMaster("local")

    val sc = new SparkContext(conf)

    val salesRDD = sc.textFile(args(0),2)

    val salesPairRDD = salesRDD.map(rec => {
      val fieldArr = rec.split(",")
      (fieldArr(1), fieldArr(3).toDouble)
    })

    val totalAmountRDD = salesPairRDD.reduceByKey(_+_).sortBy(_._2,false)



    val discountAmountRDD = totalAmountRDD.map(t => {
      if (t._2 > 1000) (t._1,t._2 * 0.9)
      else t
    })

    discountAmountRDD.foreach(println)


  }

}

1 个答案:

答案 0 :(得分:1)

使用RDD API手动解析文本文件时跳过第一行有些棘手:

val salesPairRDD =
  salesRDD
    .mapPartitionsWithIndex((i, it) => if (i == 0) it.drop(1) else it)
    .map(rec => {
      val fieldArr = rec.split(",")
      (fieldArr(1), fieldArr(3).toDouble)
    })

标题行将是第一个分区中的第一项,因此如果分区索引为mapPartitionsWithIndex0将用于遍历分区并跳过第一项。