首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >spark sql:如何优化多个巨型hive表的连接

spark sql:如何优化多个巨型hive表的连接
EN

Stack Overflow用户
提问于 2019-01-23 04:00:53
回答 1查看 1.2K关注 0票数 1

有spark sql作业:

代码语言:javascript
运行
复制
spark.sql(s"""SELECT *
  FROM (
  select * from default.table1
  where
  created_dt between date '2018-01-01' and '2018-01-02'
  group by 1,2) table11, -- about 100,000,000 records
  default.table2 table22,-- about 600,000,000 records
  default.table3 table33,-- about 3000,000,000 records
  default.table4 table44-- about 100,000,000 records
  WHERE table22.item_id = table11.item_id
  AND hot.item_site_id  IN (SELECT SITE_ID FROM default.table5)
  AND table22.item_id = table33.item_id
  AND table22.end_dt = table33.end_dt
  AND table22.end_dt >= date '2018-01-01' - interval '180' day
  LIMIT 10000""")
  .collect()
  //.map(t => "Id: " + t(0))
  .foreach(println)

在作业中,应将4个Hive表连接到item_idend_dt等字段上。每个表中大约有100,000,000条记录。

如何优化连接?例如,如果对每个表进行分区,性能会有很大提高吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-01-23 11:41:54

有许多优化Spark joins的策略。在此Spark Summit presentation中概述了许多内容。您可以找到有关优化SortMergeJoin performance here的更多详细信息。

请注意,排序合并联接可以非常有效地对已排序的数据进行操作。以正确的形式获取数据的一种方法是将其保存为一个分块的表,每个存储桶中的数据都已排序(df.write.bucketBy(n, "x").sortBy("x"))。表元存储将保留有关分词的信息,可供查询优化器稍后使用。请注意,如果保存到路径,这将不起作用,除非您使用的是Databricks Delta之类的内容。

除此之外,您还想看看我对what is an optimized way of joining large tables in Spark SQL的回答。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54315616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档