У меня есть пять Hive
таблиц, предположим, что имена A, B, C, D и E. Для каждой таблицы есть ключ customer_id в качестве ключа для соединения между ними. Кроме того, каждая таблица содержит не менее 100: 600 столбцов, все они имеют формат Parquet
.
Пример одной таблицы ниже:
CREATE TABLE table_a
(
customer_id Long,
col_1 STRING,
col_2 STRING,
col_3 STRING,
.
.
col_600 STRING
)
STORED AS PARQUET;
Мне нужно набрать два очка,
- Соедините их вместе наиболее оптимальным способом, используя Spark Scala. Я пытался
sortByKey
до присоединения, но все еще существует узкое место в производительности. Я пытался набрать reparation
по ключу перед соединением, но производительность все еще не была хорошей. Я пытался увеличить параллелизм для Spark, чтобы сделать его 6000 со многими исполнителями, но не смог достичь хороших результатов.
- После объединения мне нужно применить отдельную функцию для некоторых из этих столбцов.
Пример объединения, которое я пробовал ниже,
val dsA = spark.table(table_a)
val dsB = spark.table(table_b)
val dsC = spark.table(table_c)
val dsD = spark.table(table_d)
val dsE = spark.table(table_e)
val dsAJoineddsB = dsA.join(dsB,Seq(customer_id),"inner")