Как разделить раздел на фиксированное количество разделов на столбец в Spark?

#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")