对于在开发过程中可能出现的数据倾斜问题,可提供一种利用双重group by的方法来解决。
分析:
可以使用类似于SparkCore中解决数据倾斜,提高的两阶段聚合(局部+全局)
局部——随机打散+前缀,通过groupBy完成局部统计
全局——去掉前缀,通过groupBy完成全局统计
object _05SparkSQLOptimizationOps {
def main(args: Array[String]): Unit = {
Logger.getLogger("org.apache.hadoop").setLevel(Level.WARN)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.project-spark").setLevel(Level.WARN)
val conf = new SparkConf().setMaster("local[2]").setAppName(s"${_05SparkSQLOptimizationOps.getClass.getSimpleName}")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
//注册自定义的函数
sqlContext.udf.register[String, String, Int]("addRandomPrefix", (field