Apache spark Apache Spark遇到了非常奇怪的数据倾斜
环境:Spark 1.6.3,纱线上的Spark,150个执行器*2个内核,每个6 GB(内存为40%),python 我有一个spark数据框,它有3列:{int('userId')、longInt('productId')、double('CatgResult')},数据框的长度约为10亿 数据具有一个特征,即当一个“userId”-“productId”对作为密钥时,整个数据帧中最多只存在一个另一个对应项,并且大多数“userId”-“productId”对可能是整个数据帧中唯一的一对 下面是代码:Apache spark Apache Spark遇到了非常奇怪的数据倾斜,apache-spark,pyspark,apache-spark-sql,spark-dataframe,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,环境:Spark 1.6.3,纱线上的Spark,150个执行器*2个内核,每个6 GB(内存为40%),python 我有一个spark数据框,它有3列:{int('userId')、longInt('productId')、double('CatgResult')},数据框的长度约为10亿 数据具有一个特征,即当一个“userId”-“productId”对作为密钥时,整个数据帧中最多只存在一个另一个对应项,并且大多数“userId”-“productId”对可能是整个数据帧中唯一的一对 下
# From HIVE, to dismiss other factors.
unionTable = sqlContext.sql("SELECT * FROM tempdb.unionTable")
# The problem.
unionTable = unionTable.groupby(['userId', 'productId']).sum('CatgResult')
# Any action.
unionTalbe.show()
每当unionTable.action()出现时,它都会在“groupby().sum()”处停留大约10分钟。从spark web UI中,我可以看到,在该阶段总共150个执行者中:
1.两个执行器输入约200~300MB,但洗牌写入2.5GB,拖后执行时间;
2.其他执行器的输入范围为900MB~32B,洗牌写入的数据量几乎相同
更重要的是:
你有什么问题吗?我的问题是:这种数据倾斜严重拖累了我的程序,因为我要处理数以万亿计的数据,有时会出现“无序输出位置丢失”错误。。我必须找出问题所在,以及如何解决数据偏差。不确定这是否相关,但这是我所知道的唯一与偏差相关的pyspark问题: