【发布时间】:2019-09-06 04:26:02
【问题描述】:
我想使用 Spark + Scala 从 rdd 获取模式(最常见的数字)。
我可以通过以下方式得到它,但我认为这可能是一种更好的计算方法。最重要的是,如果多个值具有相同的重复次数,我需要将它们都返回。
让我们看看我的示例代码:
val l = List(3,4,4,3,3,7,7,7,9)
val rdd = spark.sparkContext.parallelize(l)
val grouped = rdd.map (e => (e, 1)).groupBy(_._1).map(e=> (e._1, e._2.size))
val maxRep = grouped.collect().maxBy(_._2)._2
val mode = grouped.filter(e => e._2 == maxRep).map(e => e._1).collect
结果是对的:
Array[Int] = Array(3, 7)
但是有没有更好的方法来做到这一点?我的意思是考虑性能,因为原始 RDD 会比这大得多。
【问题讨论】:
标签: scala apache-spark