粗暴的临时解决方法
增大partition数, 让partition中的数据量<2g
由于是left join触发了shuffle操作, 而spark默认join时的分区数为200(即spark.sql.shuffle.partitions...=200), 所以增大这个分区数, 即调整该参数为800, 即spark.sql.shuffle.partitions=800
2.3....确认数据倾斜
方法一: 通过sample算子对DataSet/DataFrame/RDD进行采样, 找出top n的key值及数量
方法二: 源数据/中间数据落到存储中(如HIVE), 直接查询观察...“脏数据”(非法数据)
业务无关的数据
3.分析join操作, 左右表的特征, 判断是否可以进行小表广播 broadcast
(1)这样可避免shuffle操作,特别是当大表特别大
(2)默认情况下,...join时候, 如果表的数据量低于spark.sql.autoBroadcastJoinThreshold参数值时(默认值为10 MB), spark会自动进行broadcast, 但也可以通过强制手动指定广播