apache spark - tutorial - Encontrar eficientemente todos los sub rangos relevantes para las tablas bigdata en Hive/Spark
scala y spark (1)
Con spark
, ¿quizás una unión no equi como esta?
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|
+---+-----+---+
Después de esta pregunta, me gustaría preguntar. Tengo 2 tablas: la primera tabla - MajorRange
row | From | To | Group ....
-----|--------|---------|---------
1 | 1200 | 1500 | A
2 | 2200 | 2700 | B
3 | 1700 | 1900 | C
4 | 2100 | 2150 | D
...
La segunda tabla - SubRange
row | From | To | Group ....
-----|--------|---------|---------
1 | 1208 | 1300 | E
2 | 1400 | 1600 | F
3 | 1700 | 2100 | G
4 | 2100 | 2500 | H
...
La tabla de salida debe ser todos los grupos SubRange
que se superponen sobre los grupos MajorRange
. En el siguiente ejemplo, la tabla de resultados es:
row | Major | Sub |
-----|--------|------|-
1 | A | E |
2 | A | F |
3 | B | H |
4 | C | G |
5 | D | H |
En caso de que no haya superposición entre los rangos, el Major
no aparecerá. Ambas tablas son tablas de datos grandes. ¿Cómo puedo hacerlo usando Hive / Spark de la manera más eficiente?