【发布时间】:2017-04-19 17:04:19
【问题描述】:
问题已解决。 table_b 中有巨大的相同键
我有一个这样的 sql:
SELECT *
FROM table_a a
LEFT OUTER JOIN tbale_b b ON a.key=b.key
LEFT OUTER JOIN table_c c on a.key2=c.key2
查询是由spark on yarn执行的。
和往常一样,table_b 中只有一条记录与 table_a 中的 key 相同, 查询可以非常快速且正确地执行
但是如果table_b中有一些重复的记录,查询会执行得很慢,其中一个reduce任务会很高
【问题讨论】:
-
问题出在哪里?永远记住,Spark 不是您可以拥有大量连接的典型 RDBMS
-
谢谢,但是int table_a大约有20亿条记录,这个工作是关于ETL的。首先,我们将所有数据加载到 HDFS,然后我使用 spark 作业来转换这些数据
-
有一张作业截图:i.stack.imgur.com/pJfah.png
-
您是否尝试过切换加入顺序?所以也许尝试将 c fist 加入 a 然后 b ?
-
还没有。但是我对table_b进行了anylized,并且我资助了重复记录,大约10%,总记录为1000万。我尝试选择不同的table_b,然后查询可以执行成功且快速
标签: apache-spark apache-spark-sql