2016-07-29 2 views
4

У меня возникли проблемы с установкой данных в статический раздел таблицы Hive с использованием Spark SQL. Я могу использовать такой код для записи в динамические разделы:Вставка данных в статический раздел Hive с использованием Spark SQL

df.write.partitionBy("key").insertInto("my_table") 

Однако, я не могу понять, как вставить данные в статический раздел. Это означает, что я хочу определить раздел, где весь DataFrame должен быть написан без необходимости добавления столбца в DataFrame.

Я вижу статическое разбиение, упомянутое в классе InsertIntoHiveTable, поэтому, я думаю, оно поддерживается. Существует ли публичный API для выполнения того, что я хочу?

+0

вы смогли найти какую-либо API, подобные запись в динамический раздел? – Explorer

+1

Нет, я ничего не смог найти и зарегистрировал RRD как временную таблицу и запустил SQL INSERT. Однако много кода Hive было переписано в Spark 2.0, так что теперь это возможно. –

ответ

1

Вы можете использовать

DataFrame tableMeta = sqlContext.sql(String.format("DESCRIBE FORMATTED %s", tableName)); 
String location = tableMeta.filter("result LIKE 'Location:%'").first().getString(0); 

и использовать регулярные выражения, чтобы получить таблицу разделов. После того, как вы получите местоположение таблицы, вы можете легко построить расположение разделов, как

String partitionLocation = location + "/" + partitionKey 

(PartitionKey что-то вроде DT = 20160329/ч = 21)

Затем вы можете написать на этот путь

df.write.parquet(partitionLocation) 

(в моем случае, когда я строй dataframe, я не включаю столбцы разделов в. не уверен, что если есть какая-либо ошибка, когда столбцы разделов включены)

+1

Я думаю, что регистрация DataFrame в качестве временной таблицы, а затем запуск Hive SQL, который вставляет данные оттуда в конкретный раздел, является лучшим решением, чем это (он менее хрупкий), но мне было интересно узнать о собственной поддержке этого в Spark. –

+0

Согласитесь с запуском HiveSQL для вставки данных. Я также ищу поддержку для этого, но не мог найти его где-нибудь. – tpham

Смежные вопросы