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的后半部分?
答案 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()。