Apache spark 在Hive/Spark中高效查找bigdata表的所有相关子范围
下面我想问一个问题。 我有两张桌子: 第一个表-Apache spark 在Hive/Spark中高效查找bigdata表的所有相关子范围,apache-spark,hive,range,bigdata,Apache Spark,Hive,Range,Bigdata,下面我想问一个问题。 我有两张桌子: 第一个表-MajorRange row | From | To | Group .... -----|--------|---------|--------- 1 | 1200 | 1500 | A 2 | 2200 | 2700 | B 3 | 1700 | 1900 | C 4 | 2100 | 2150 | D ... row | From | To |
MajorRange
row | From | To | Group ....
-----|--------|---------|---------
1 | 1200 | 1500 | A
2 | 2200 | 2700 | B
3 | 1700 | 1900 | C
4 | 2100 | 2150 | D
...
row | From | To | Group ....
-----|--------|---------|---------
1 | 1208 | 1300 | E
2 | 1400 | 1600 | F
3 | 1700 | 2100 | G
4 | 2100 | 2500 | H
...
第二个表-子范围
row | From | To | Group ....
-----|--------|---------|---------
1 | 1200 | 1500 | A
2 | 2200 | 2700 | B
3 | 1700 | 1900 | C
4 | 2100 | 2150 | D
...
row | From | To | Group ....
-----|--------|---------|---------
1 | 1208 | 1300 | E
2 | 1400 | 1600 | F
3 | 1700 | 2100 | G
4 | 2100 | 2500 | H
...
输出表应该是与主范围
组重叠的所有子范围
组的列表。在以下示例中,结果表为:
row | Major | Sub |
-----|--------|------|-
1 | A | E |
2 | A | F |
3 | B | H |
4 | C | G |
5 | D | H |
如果两个范围之间没有重叠,Major
将不会出现。
这两个表都是大数据表。如何以最有效的方式使用Hive/Spark进行此操作?使用
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|
+---+-----+---+
val join\u expr=major\u range(“From”)
谢谢,以防没有行和列。我需要在你的代码中更改什么?你不需要更改代码。此处不使用行
列。我创建了一个新的行
列以满足您的输出。