Spark Dataframe:应用groupBy(超过2列).sum(另一列)占用50GB空间和大量时间

时间:2016-11-02 10:24:49

标签: scala apache-spark dataframe group-by

我在AWS集群(1个拥有4个工作节点的主服务器)上运行基于Scala(2.11.8)的spark(2.0.0)程序,每个节点有15GB的内存。

使用以下配置运行:

spark-submit    --master "spark://ip-xyz:xyz"     --deploy-mode cluster     
   --driver-memory 2g     --executor-memory 10g     --queue default  myProject.jar 

数据帧(df)由“16098400000”行组成。

|    a_id|   i_id|   category|                name|       u|      p|    score|
+--------+-------+-----------+--------------------+--------+-------+---------+
|12000035|8119221|     ARTIST|ASHBY, LINDEN: CA...| 0.01251|0.93166|0.0116613|
|12000081|8119221|     ARTIST|ASHBY, LINDEN: CA...|  0.2672|0.93166| 0.248998|
|12000009|8111111|     ARTIST|ASHBY, LINDEN: CA...|  0.0236|0.93160| 0.022008|
|12000091|8111111|     ARTIST|ASHBY, LINDEN: CA...|     0.5|0.93126|  0.46583|
|13200000|8100000|     ARTIST|ASHBY, LINDEN: CA...|  0.0944|0.93166| 0.088034|
+--------+-------+-----------+--------------------+--------+-------+---------+

运行以下代码:

val df1 = df.groupBy("a_id", "i_id").sum("score")

检查点的容量为50GB。 在监控检查点时,使用的空间在2小时内从500mb增加到45-50 gb。

之后,应用程序失败并显示错误:

  

线程“main”中的异常java.lang.reflect.InvocationTargetException
  引起:java.io.IOException:设备上没有剩余空间

我知道这是一个庞大的数据集,我可以使用相同的资源高效地完成吗?

注意:尝试groupBy只有1列,操作在5分钟内成功完成。

0 个答案:

没有答案