我使用的火花與sc.textFile(fileLocation)
,需要能夠快速下降的第一和最後一行閱讀的文本文件(他們可能是一個首或尾)。我發現的好方法返回第一和最後一排,但沒有很好的一個刪除它們。這可能嗎?刪除的RDD的第一個和最後一行星火
回答
這樣做將是zipWithIndex
,然後用指標篩選出的記錄的一種方式0
和count - 1
:
// We're going to perform multiple actions on this RDD,
// so it's usually better to cache it so we don't read the file twice
rdd.cache()
// Unfortunately, we have to count() to be able to identify the last index
val count = rdd.count()
val result = rdd.zipWithIndex().collect {
case (v, index) if index != 0 && index != count - 1 => v
}
注意,這可能是在性能方面相當昂貴的(如果緩存RDD - 你使用內存;如果你不使用,你可以讀RDD兩次)。所以,如果你有一個基於其內容(例如,如果你知道所有的記錄,但這些應包含一定的模式)的識別這些記錄的任何方式,使用filter
可能會更快。
我正與一個可能的解決方案,以更新的問題:我用'拿(data.count - 1)'然後篩選其中'行! = data.first'。對於封面下的火花是如何工作的相當無知,哪種解決方案會更快?這些數據將以任何方式存儲在內存中。 – bendl
有一個非常顯着的區別 - 'take(data.count - 1)'會將整個RDD收集到_driver_內存(一臺機器!),對於大型RDD,這會導致OOM;另一方面,緩存保持RDD _distributed_並將其_partitions_加載到工作節點的內存中(其中有很多潛在的) - 所以你不太可能獲得OOM並且任何一種方式都會更快(數據將不必傳輸給驅動程序)。你只能用'take'來收集相對較少的記錄。 –
這可能是一個更輕的版本:
val rdd = sc.parallelize(Array(1,2,3,4,5,6), 3)
val partitions = rdd.getNumPartitions
val rddFirstLast = rdd.mapPartitionsWithIndex { (idx, iter) =>
if (idx == 0) iter.drop(1)
else if (idx == partitions - 1) iter.sliding(2).map(_.head)
else iter
}
scala> rddFirstLast.collect()
res3: Array[Int] = Array(2, 3, 4, 5)
- 1. SED:第一個和最後一個空行不被刪除
- 2. 星火:使用同一RDD
- 3. C++刪除數字的第一個和最後一個數字
- 4. 從txt文件的每一行刪除第一個和最後一個字符
- 5. 刪除一行中的第一個和最後一個數組元素?
- 6. 刪除第一個和最後一個標記行之間的行
- 7. 從文件中刪除第一行和最後一行
- 8. 字符串文件的Xcode - 刪除第一和最後一個「+;
- 9. 刪除第一個NaN後的DataFrame行
- 10. 如何刪除csv文件中的第一個X和最後一個X行?
- 11. 從netaddr結果中刪除第一個和最後一個IP
- 12. 刪除第一個和最後一個字符C++
- 13. 刪除第一個和最後一個反斜槓?
- 14. deleteRange函數只刪除第一個和最後一個
- 15. 刪除第一個和最後一個雙引號
- 16. 在星火RDD
- 17. 刪除dataGridView的最後一個空行
- 18. jQuery的刪除所有,除了第一個和最後一個號碼
- 19. 火鳥:一個月的最後一個星期日
- 20. Spark Scala基於另一個RDD的列刪除一個RDD中的行
- 21. 刪除第一個標籤和最後一個分號之間的一切
- 22. 星火RDD刪除記錄有多個按鍵
- 23. jquery刪除表中第一行和最後一行的背景顏色
- 24. 使用豬腳本刪除文件的第一行和最後一行
- 25. 更有效的刪除第一個和最後一個對象的方法
- 26. tsql - 刪除最後一行
- 27. tableview刪除最後一行
- 28. Datagridview刪除最後一行
- 29. 重塑星火RDD
- 30. 星火RDD不Elasticsearch
如果他們按照一定的模式,您可以使用過濾器。 – jamborta
他們不這樣做,這是該工具的目的... – bendl