таблицы чтения / записи в Spark - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть несколько таблиц (со строками 100 миллионов строк), которые хранятся в виде внешних таблиц Hive в формате Parquet.Задание Spark необходимо объединить несколько из них, используя один столбец, почти без фильтрации.Столбец соединения имеет уникальные значения примерно в 2/3 раза меньше, чем количество строк.

Я вижу, что при соединении происходят тасовки;и я пытался использовать группирование / разбиение для повышения производительности соединения.Я думаю, что если Spark может знать, что каждая из этих таблиц была упакована с использованием одного и того же столбца, он может загружать кадры данных и объединять их без перемешивания.Я пытался использовать Hive bucketing, но перетасовки не уходят.(Из документации Spark видно, что сегментирование Hive не поддерживается, по крайней мере, в Spark 2.3.0, о чем я узнал позже.) Могу ли я использовать для этого функцию группировки Spark?Если да, должен ли я отключить поддержку Hive и просто читать файлы напрямую?Или я мог бы переписать таблицы один раз, используя схему распределения Spark, и все еще иметь возможность читать их как таблицы Hive?

РЕДАКТИРОВАТЬ: Для выписывания таблиц Hive с интервалом я использовал что-то вроде:

customerDF
.write
.option("path", "/some/path")
.mode("overwrite")
.format("parquet")
.bucketBy(200, "customer_key")
.sortBy("customer_key")
.saveAsTable("table_name")

Письменная часть, кажется, работает.Однако чтение из двух таблиц, написанных таким образом, и объединение их не сработало, как я ожидал.То есть Spark снова делил обе таблицы на 200 разделов.

У меня нет кода для выполнения Spark bucketing прямо сейчас, но я обновлю его, если я это выясню.

...