Невозможно записать фрейм данных в секционированную таблицу партера Hive с помощью pyspark - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь записать свой фрейм данных в таблицу разделов кустов. Формат таблицы кустов - паркет.

Но я не могу записать df в таблицу Hive.

Я пытаюсь записать свой фрейм данных в разделенную таблицу кустов. Формат таблицы кустов - паркет.

Но я не могу записать df в таблицу Hive.

Spark2.3 и Разделенный стол улья

Когда я пытался загрузить свой финальный файл в таблицу разделов кустов, я получаю сообщение об ошибке ниже

finaldf.write.mode("overwrite").format("parquet").partitionBy("mis_dt","country_codfe").saveAsTable("FinalTable")

Ошибка: вы не можете перезаписать схему таблицы. Таблица предложений, из которой также выполняется чтение; '

Когда я гуглю за вышеуказанную ошибку, они предлагают загрузить df во временную таблицу и загрузить в окончательную таблицу улья. Я попробовал эту опцию, и снова она потерпела неудачу с другой ошибкой.

finaldf.createOrReplaceTempView('tmpTable') 
final= spark.read.table('tmpTable') 
final.write.mode("overwrite").insertInto("Finaltable")

Ошибка: количество созданных разделов составляет 7004, что превышает 1000.

Но я не думаю, что у нас так много разделов.

* * 1 022 finaldf.write.mode ( "перезапись"). Формат ( "паркет"). PartitionBy ( "mis_dt", "country_codfe"). SaveAsTable ( "FinalTable") * * 1 023

2-й вариант:

finaldf.createOrReplaceTempView('tmpTable')
final= spark.read.table('tmpTable') 
final.write.mode("overwrite").insertInto("Finaltable")

Я хочу записать данные в таблицу форматов паркетных кустов с использованием spark 2.3

finaldf.write.mode("overwrite").format("parquet").partitionBy("mis_dt","cntry_cde").saveAsTable("finaltable")

1 Ответ

0 голосов
/ 27 мая 2019

spark.sql.sources.partitionOverwriteMode введено в Spark> = 2.3

sparkConf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")    
sparkConf.set("hive.exec.dynamic.partition", "true")
sparkConf.set("hive.exec.dynamic.partition.mode", "nonstrict")

Использовать код ниже -

final.write.mode(SaveMode.Overwrite).insertInto("table")

Примечание: Таблица должна быть создана в Hive с разделом.

...