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

时间:2016-03-18 07:36:35

标签: scala apache-spark rdd

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的后半部分?

2 个答案:

答案 0 :(得分:2)

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

如果你特别想要它的前半部分已经超过整数最大尺寸,你可以像其他人建议过滤掉你不需要的那一半,所以基本上把它转换成另一个用较少的物品的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中有很多元素,你可能会遇到内存问题(我假设你有)。

答案 1 :(得分:1)

可以使用randomSplit()将RDD拆分为较小RDD的数组,然后可以在每个RDD的循环中完成take()。