Есть два стола Hive. Обе эти таблицы используют формат файла Parquet.
Таблица A - с 5 столбцами (col1, col2, col3, col4, col5)
Таблица B - 5 столбцов (col1, col2, col3, col4, col5)
У меня есть ниже вопросы.
Q1 - Какой из них будет работать лучше.
Q2 - Запустит sql, загрузит все 5 столбцов из ТАБЛИЦЫ A и Таблицы B и затем выполнит объединение, или оптимизатор достаточно умен, чтобы выбрать только необходимые столбцы. Насколько я понимаю, если мы используем columunar формат файла, он должен выбрать только необходимые столбцы.
Q3 - Можем ли мы написать его лучше, чтобы он работал лучше.
Случай 1: Использование Spark SQL для объединения и выбора нескольких столбцов
val result_df1 = sparkSess.sql(
""" select A.col1, A.col2 , A.col3 , B.col1 , B.col2, B.col3
FROM A
INNER JOIN B
ON A.col1 = B.col1 """)
Случай 2: Использование Spark Dataframe. Сохранение таблиц в кадрах данных и выполнение операции объединения и выбор нескольких столбцов.
val A_df = sparkSess.table("A").select("col1", "col2", "col3")
val B_df = sparkSess.table("B").select("col1", "col2", "col3")
val result_df2 = A_df
.join(B_df, A_df("col1") === B_df("col1"))
.select("A_df.col1", "A_df.col2", "A_df.col3", "B_df.col1", "B_df.col2", "B_df.col3")