scala - 从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)
}
}
解决方案
使用 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
。
推荐阅读
- mongodb - 根据 mongodb 中的多个字段对集合进行排序
- python - VSCode 中 Python 中的语法高亮显示
- ansible - 需要从 ansible json stdout 中获取值并将它们放入列表中
- testing - 如何使用 pytest 测试 SimPy 模拟代码?
- jquery - 数组未显示在表中
- python - 考虑到缺失值,添加两列不同的数据框
- c# - 如何在我的 Xamarin 应用程序中启用或禁用推送通知?
- r - 具有动态列输入的列乘积 - 向量化操作
- javascript - 将两个用户号码输入存储在变量中,验证为数字,并写入两位数的总和
- python - 如何在 Python 中重命名文件名的一部分