2017-03-13 59 views
0

我新的最后一行火花我想从一个CSV文件火花如何删除在CSV文件

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

    Total amount:4444228900 
    Total amount: 133826689 

我想删除线说明XYZ总额删除头和最后一行:4444228900总额:从文件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); 

如何删除的最后几行的第一行?

回答

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 
}); 

它的工作以同样的方式,但可能会更快

+0

驾驶室ü解释这是如何工作 – coder25

+0

@ coder25我已经添加了一些解释:) –