Spark SQL и Spark Dataframe объединяются - чтение из таблицы улья, созданной в Parquet - PullRequest
0 голосов
/ 15 ноября 2018

Есть два стола 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")
...