【问题标题】:Best way to order RDD Elements Apache Spark订购 RDD Elements Apache Spark 的最佳方式
【发布时间】:2016-12-06 19:00:09
【问题描述】:

我需要找到最有效的方法来对大尺寸的 RDD 进行全局排序,尽可能少地改组。我需要它来避免出现性能问题,例如 outOfMemory 异常等等。

谢谢

【问题讨论】:

    标签: scala apache-spark rdd bigdata


    【解决方案1】:

    为了得到排序的 RDD,你必须洗牌的数据量是固定的,所以从某种意义上说,每个最小的解决方案都已经尽可能少地洗牌了。唯一可以改进的是将排序机制下推为随机播放,但这部分已经由RDD.sortByOrderedRDDFunctions.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 中的所有优化工作都针对数据集(和数据帧),因此为了获得更好的优化,将 RDD 转换为 DataFrame,并使用那里的构造进行排序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-13
        • 2013-01-19
        • 2012-06-24
        • 2015-06-28
        • 2021-10-02
        • 2011-08-21
        • 2015-07-18
        • 1970-01-01
        相关资源
        最近更新 更多