apache spark - العثور بكفاءة جميع النطاقات الفرعية ذات الصلة والجداول بيغداتا في خلية/شرارة



apache-spark hive (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|
+---+-----+---+

بعد هذا السؤال، أود أن أسأل. لدي 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
... 

يجب أن يكون جدول الإخراج كل المجموعات SubRange التي تتداخل مع مجموعات MajorRange . في المثال التالي جدول النتائج هو:

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

في حالة عدم وجود تداخل بين نطاقات لن تظهر Major . كلا الجداول جداول البيانات الكبيرة.كيف يمكنني أن أفعل ذلك باستخدام خلية / شرارة في أكثر الطرق كفاءة؟