OutofMemory异常发生在Spark SQL Join中

时间:2016-09-27 02:50:13

标签: join apache-spark apache-spark-sql

我正在尝试在Spark 2.0中使用Spark SQL模块。

运行Spark SQL Join查询时出现OutOfMemory Exception。 这些是我的问题细节:

我为testing.schema生成了两个表(排名和用户访问,保存为txt文件),如下所示

rankings( 
  pageURL STRING, 
  pageRank INT, 
  avgDuration INT ) 

uservisits ( 
  sourceIP STRING, 
  destURL STRING, 
  visitDate STRING, 
  adRevenue DOUBLE, 
  userAgent STRING, 
  countryCode STRING, 
  languageCode STRING, 
  searchWord STRING, 
  duration INT ) 

排名有10000列,uservisits有15000000列。 uservisits是偏斜数据,70%的记录在desURL字段中具有相同的值

当我使用Join命令时如下

SELECT pagerank,sourceIP ,pageURL ,adrevenue 
    from **uservisits** 
    INNER JOIN **rankings** 
    ON pageURL=destURL 
    order by adrevenue desc 

它成功运行无例外。

但是当我交换两个这样的表(排名和用户访问被交换)时:

SELECT pagerank,sourceIP ,pageURL ,adrevenue 
    from **rankings**
    INNER JOIN **uservisits** 
    ON pageURL=destURL 
    order by adrevenue desc 
  

java.lang.OutOfMemoryError:超出GC开销限制

发生了异常。

之后,我做了一些像这样的连接查询测试,看起来对于偏斜的数据,小表连接大表会得到异常,但是大表加入小表赢了。

我对此感到困惑。谁能告诉我为什么会出现这些问题?

谢谢!

0 个答案:

没有答案