Spark Dataframe加入堆空间问题和太多分区

时间:2018-01-09 10:40:17

标签: scala dataframe join spark-dataframe heap-memory

我正在尝试加入数据帧并事实上提前过滤以进行简单测试。过滤后的每个数据帧只有4行。每个数据帧有190列。

我在本地运行此代码,它运行速度超快(尽管只有22列)。此外,我在本地签入时的分区大小只是1.在2个键列上的连接非常简单,我确保没有笛卡尔积。

当我在我的Dev / Uat集群中运行它时,它将永远耗尽并且在两者之间失败。此外,我看到创建的分区大约是每个联接40,000。我正在使用resultDf.rdd.partitions.size打印它。

我已经将这样的联接分开了,并没有帮助。

var joinCols = Seq(" subjectid"," componenttype")

val df1 = mainDf1.filter(" metricname' NPV'")。withColumnRenamed(" my_attr"," df1attr") .withColumnRenamed("值"" df1val&#34)     val df2 = mainDf2.filter(" metricname' NPV'")。withColumnRenamed(" my_attr"," df2attr")。withColumnRenamed( "值"" df2val&#34)     val df3 = mainDf3.filter(" metricname' NPV'")。withColumnRenamed(" my_attr"," df3attr")。withColumnRenamed( "值"" df3val&#34)     val df4 = mainDf2.filter(" metricname' NPV'")。withColumnRenamed(" my_attr"," df4attr")。withColumnRenamed( "值"" df4val&#34)

var resultDf = df1.as(" dft")。join(df2,joinCols," inner")。select(" dft。*", " df2attr"" df2val&#34)

//在这里检查分区大小并显示数据帧以确保我们只按预期获得4行。我得到了4行但是40,000个分区,并且在这里花费了很多时间。

resultDf = resultDf.as(" dfi")。join(df3,joinCols," inner")。select(" dfi。*",& #34; df3attr"" df3val&#34)

//大多数情况下,我的程序出现堆空间错误或异常exitCode = 56

resultDf = resultDf.as(" dfa")。join(df4,joinCols," inner")。select(" dfa。*",& #34; df4attr"" df4val&#34)

使用的命名约定都是虚拟的,可以将代码放在这里。所以,请不要介意。

任何输入/帮助让我朝着正确的方向前进?

0 个答案:

没有答案