Apache Spark遇到了一个非常奇怪的数据偏差

时间:2016-12-04 03:40:40

标签: apache-spark pyspark apache-spark-sql spark-dataframe

环境:Spark 1.6.3,火花,150个执行器* 2个核心,每个6 GB(内存占40%),python。

我有一个带有3列的spark-Dataframe:{int('userId'),longInt('productId'),double('CatgResult')},数据帧的长度大约为10亿。

数据具有一个特征,即当'userId' - 'productId'对作为关键字时,整个数据帧中最多只存在另一个对应物,并且大多数'userId' - 'productId'对可能是整个数据框架中唯一的一对。

现在这里是代码:

body
//not here
block content
script(src="./javascripts/vueapp.js")

每当unionTable.action()时,它都会停留在'groupby()。sum()'大约10分钟。从spark web UI,我可以看到在这个阶段的总共150个执行者中: 1.两个执行器输入大约200~300 MB,但是随机写入2.5GB,拖延执行时间; 2.其他执行者的输入范围为900MB~32B,随机数写入的数据量几乎相同。

更重要的是:

  1. 我尝试将每个'userId' - 'productId'对合并到一个字符串键中,使用str(unionTable ['userId'])+“::”+ str(unionTable ['productId']) ,但它没有帮助。

  2. 然后我附加了一个随机的int [0,10]作为字符串后缀,也没有帮助。

  3. 我将数据框转换为rdd,使用reduceByKey,仍然存在偏斜,但需要花费更多时间。

  4. 在整个程序中,这个groupby()或reduceByKey()占总执行时间的95%,我不知道发生了什么。

    我的问题是: 这种数据偏差严重拖累了我的程序,因为我将处理数万亿的数据,有时会发生“乱丢输出位置丢失”错误。我必须找出问题是什么以及如何解决这种数据偏差。

    Overview

    The top shuffle output

0 个答案:

没有答案