首页 > 解决方案 > 从spark scala中的txt或csv文件读取时从csv中删除标题

问题描述

我正在尝试从给定的输入文件中删除标题。但我做不到。这是我写的。有人可以帮我如何从 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)


  }

}

标签: scalaapache-spark

解决方案


使用 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)
    })

标题行将是第一个分区中的第一项,因此mapPartitionsWithIndex用于遍历分区并在分区索引为 时跳过第一项0


推荐阅读