Scala Spark RDD:rdd.take() 只接受整数

Scala Spark RDD : rdd.take() accepts only Integer

val fileContent=sc.textFile(path)
val x=fileContent.count()/2
fileContent.take(x) // gives error x: should be integer

x 很长。我可以做 `x.toInt ,但是如果 x 太大而无法转换为 Int 怎么办?

如何获取rdd的后半部分?

可以使用randomSplit() 将RDD 拆分为一个较小的RDD 数组,然后可以为每个RDD 循环执行take()。

如果你想要所有的元素,你可以在 RDD 上使用 collect 方法。

如果你特别想要它的前半部分已经超过 Integers max size,你可以像其他人建议的那样过滤掉你不需要的那一半,所以基本上将它转换成另一个 rdd 更少的项目并收集那个.像这样:

  val sizeOfRdd = fileContent.count()
  fileContent
    .zipWithIndex // assign an index to every element
    .filter(_._2 < sizeOfRdd/2) // filter out the first half
    .map(_._1) // drop the index
    .collect() // take every element 

注意,take 和 collect 都会将数据集中的元素移动到驱动程序,如果你有很多,你可能会 运行 进入内存问题RDD 中的元素(我假设你有)。