Spark RDD接受和删除行

时间:2018-10-26 06:17:03

标签: scala apache-spark

我的RDD为1000个元素。我想从中取出100个元素,然后从初始RDD中删除这100个元素。但是尝试多种方法后,我找不到方法。

var part = dataRDD.take(100)

part是一个Array [String]

我要从100个dataRDD中删除100个元素。

var dataRDD = dataRDD.filter(row => row != part)

上面没有显示任何错误,但没有删除任何行。 dataRDD仍然具有相同的1000行。

能否请您指导如何进行这项工作。

3 个答案:

答案 0 :(得分:3)

方法“ zipWithIndex”可用于拆分rdd:

val zipped = rdd.zipWithIndex()
val first100 = zipped.filter(_._2 < 100).keys
val remaining = zipped.filter(_._2 >= 100).keys

答案 1 :(得分:1)

您可以这样写:

var part = sc.parallelize(dataRDD.take(100))
val result = dataRDD.subtract(part)
result.foreach(x => foreach(x))

仅出于测试目的打印RDD

答案 2 :(得分:1)

您的代码很可能无法按预期工作,因为String始终为Int。在这种情况下,row != part是Java数组之间的引用比较。