【问题标题】:spark how to remove last line in a csv filespark如何删除csv文件中的最后一行
【发布时间】:2017-03-13 12:36:19
【问题描述】:

我是 spark 新手,我想从 csv 文件中删除标题和最后一行

      Notes  xyz
     "id","member_id"
     "60045257","63989975",
     "60981766","65023535",

     Total amount:4444228900
     Total amount: 133826689

我想从文件中删除 Notes xyzTotal amount:4444228900Total amount: 133826689 行。我已经删除了第一个文件中的一行

val dfRetail = sc.textFile("file:////home/cloudera/Projects/Project3/test/test_3.csv");
var header=dfRetail.first();
var final_data=dfRetail.filter(row => row!=header);

如何去掉最后几行?

【问题讨论】:

    标签: apache-spark spark-dataframe rdd


    【解决方案1】:

    使用 zipWithIndex 然后按索引过滤:

    val total = dfRetail.count();
    val withoutFooter = dfRetail.zipWithIndex()
                                .filter(x => x._2 < total - 3)
                                .map (x => x._1)
    

    它将每行映射到对(行,索引)。然后你过滤这个 RDD,只选择那些索引低于对象总数的那些 - 3 - 所以没有页脚。当您仅将其映射到元组的第一个元素时,对于文档行也是如此

    您也可以使用 mapPartitionsWithIndex:

    val withoutFooter = dfRetail.mapPartitionsWithIndex { (idx, iter) => 
         val size = iter.size();
         if (idx == noOfTotalPartitions) {
             iter.take(size - 3)
         }
         else iter 
    });
    

    它的工作方式相同,但可能更快

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2017-11-28
      相关资源
      最近更新 更多