#apache-spark #hive #apache-spark-sql
Вопрос:
Мне нужно прочитать данные из одной таблицы-улья и вставить их в другую таблицу-улей. Схема обеих таблиц одинакова. Таблица разделена по дате и стране. Размер каждого раздела составляет ~500 МБ. Я хочу вставить эти данные в новую таблицу, где файлы внутри каждого раздела составляют примерно 128 МБ (т. е. 4 файла).
Шаг 1: Считайте данные из исходной таблицы в Spark.
Шаг 2: Перераспределение по столбцам(страна, дата) и количество разделов до 4.
df.repartition(4, col("country_code"), col("record_date"))
Я получаю только 1 раздел на код страны и дату записи.
Комментарии:
1. hive поддерживает разделение только по значениям. Вычислите новый столбец с требуемым распределением и разделением по нему. Или добавьте дополнительные ключи к разделению, чтобы увеличить количество разделов
Ответ №1:
Что бы вы ни делали на шаге 2, ваши данные будут разделены на 4 раздела в памяти, но это не сохранит 4 файла, если вы выполните df.write.
Для этого вы можете использовать приведенный ниже код:
df.repartition(4, col("country_code"),col("record_date")) .write .partitionBy(col("country_code"),col("record_date")) .mode(SaveMode.Append).saveAsTable("TableName")