2016-08-01 61 views

回答

2

金额,你必须洗牌得到有序RDD固定所以从某种意义上讲每一个解决方案,它是最小的数据已经打乱尽可能少。唯一可以改进的是将分拣机构推入洗牌,但这部分已经由RDD.sortBy,OrderedRDDFunctions.sortByKeyJavaPairRDD.sortByKey处理。

因此,请选择适用于您的数据的方法。因此,例如:

val rdd = org.apache.spark.mllib.random.RandomRDDs.normalRDD(sc, 100, 10, 323L) 
rdd.sortBy(identity).take(3) 
// Array[Double] = 
// Array(-2.678684754806642, -1.4394327869537575, -1.2573154896913827) 
2

内存不足异常的出你看到的是,因为你有太少分区和(最有可能),这样的顺序使得一些分区,真正的大数据歪斜。 在任何情况下,spark中的所有优化工作都会转向数据集(和dataframes),以便获得更好的优化,将RDD转换为DataFrame并使用其中的构造执行排序