在 Hive/Spark 中高效查找大数据表的所有相关子范围

Posted

技术标签:

【中文标题】在 Hive/Spark 中高效查找大数据表的所有相关子范围【英文标题】:Finding efficiently all relevant sub ranges for bigdata tables in Hive/ Spark 【发布时间】:2017-09-12 18:54:16 【问题描述】:

以下this问题,我想问。 我有 2 张桌子: 第一张表——MajorRange

row  | From   |  To     | Group ....
-----|--------|---------|---------
1    | 1200   |   1500  | A
2    | 2200   |   2700  | B
3    | 1700   |   1900  | C
4    | 2100   |   2150  | D
...

第二张桌子 - SubRange

row  | From   |  To     | Group ....
-----|--------|---------|---------
1    | 1208   |   1300  | E
2    | 1400   |   1600  | F
3    | 1700   |   2100  | G
4    | 2100   |   2500  | H
... 

输出表应该是与MajorRange 组重叠的所有SubRange 组。在以下示例中,结果表为:

 row | Major  |  Sub | 
-----|--------|------|-
1    | A      |   E  | 
2    | A      |   F  |
3    | B      |   H  |
4    | C      |   G  |
5    | D      |   H  |

如果范围之间没有重叠,Major 将不会出现。 这两个表都是大数据表。如何以最有效的方式使用 Hive/Spark?

【问题讨论】:

【参考方案1】:

使用spark,可能是这样的非等值连接?

val join_expr = major_range("From") < sub_range("To") && major_range("To") > sub_range("From")

(major_range.join(sub_range, join_expr)
 .select(
    monotonically_increasing_id().as("row"), 
    major_range("Group").as("Major"), 
    sub_range("Group").as("Sub")
  )
).show

+---+-----+---+
|row|Major|Sub|
+---+-----+---+
|  0|    A|  E|
|  1|    A|  F|
|  2|    B|  H|
|  3|    C|  G|
|  4|    D|  H|
+---+-----+---+

【讨论】:

谢谢,以防没有行列。我必须在您的代码中更改什么? 您不需要更改代码。此处未使用row 列。我创建了一个新的row 列来满足您的输出。

以上是关于在 Hive/Spark 中高效查找大数据表的所有相关子范围的主要内容,如果未能解决你的问题,请参考以下文章

一文教你看懂大数据的技术生态圈:Hadoop,hive,spark

一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了

如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是啥关系?

Hadoop,Hive,Spark 之间是啥关系

Hadoop核心架构

Mac上搭建Hadoop+Hive+Spark开发环境