0
点赞
收藏
分享

微信扫一扫

Spark groupby 优化加速 同时 解决内存溢出OOM问题


由于每个groupby的key上的数据分布不均匀,其中有groupby的key的数据过量,导致速度慢和OOM问题,

groupby的每个key在一个worker机器,如果一共只有3个groupby的key,最后就只剩3个worker机器,

采用二次groupby的方式优化:

val randomInt = new scala.util.Random
def splitKey = udf((inputKey: String) => {
inputKey + "---" + randomInt.nextInt(100).toString
})

// 将原来的groupby的key拆分成100份
dataframe = dataframe.withColumn("key_split", splitKey(col("origin_key"))).repartition(1000)

val tmpDF = dataframe.rdd.groupBy(row => row.getAs[String]("key_split"))
.map(pair => {
val originKey = pair._1.split("---")(0)
(originKey)
}).toDF("origin_key")

val finalDF = tmpDF.rdd.groupBy(row => row.getAs[String]("origin_key")).map(pair =>{
//...

上面是groupby的key比较少的时候,如果groupby的key非常多,如果可能 先过滤掉一些次要的数据吧。


举报

相关推荐

0 条评论