在hive/spark中高效地查找bigdata表的所有相关子范围

ndh0cuux  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(458)

在这个问题之后,我想问一下。我有两张table:第一张table- MajorRange ```
row | From | To | Group ....
-----|--------|---------|---------
1 | 1200 | 1500 | A
2 | 2200 | 2700 | B
3 | 1700 | 1900 | C
4 | 2100 | 2150 | D
...

  1. 第二张table- `SubRange` ```
  2. row | From | To | Group ....
  3. -----|--------|---------|---------
  4. 1 | 1208 | 1300 | E
  5. 2 | 1400 | 1600 | F
  6. 3 | 1700 | 2100 | G
  7. 4 | 2100 | 2500 | H
  8. ...

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

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

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

but5z9lq

but5z9lq1#

spark ,也许是这样的非等分联接?

  1. val join_expr = major_range("From") < sub_range("To") && major_range("To") > sub_range("From")
  2. (major_range.join(sub_range, join_expr)
  3. .select(
  4. monotonically_increasing_id().as("row"),
  5. major_range("Group").as("Major"),
  6. sub_range("Group").as("Sub")
  7. )
  8. ).show
  9. +---+-----+---+
  10. |row|Major|Sub|
  11. +---+-----+---+
  12. | 0| A| E|
  13. | 1| A| F|
  14. | 2| B| H|
  15. | 3| C| G|
  16. | 4| D| H|
  17. +---+-----+---+
展开查看全部

相关问题