2017-03-13 72 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我已經添加了一些解釋:) –