Проблема с сохранением искры DataFrame в виде таблицы Hive - PullRequest
0 голосов
/ 26 октября 2018

У меня есть два кадра данных искры. Один из них получен из таблицы улья с использованием HiveContext:

spark_df1 = hc.sql("select * from testdb.titanic_pure_data_test")    

Второй кадр данных искры, полученный из файла .csv:

lines = sc.textFile("hdfs://HDFS-1/home/testdb/1500000_Sales_Records.csv").map(lambda line: line.split(","))    

spark_df_test = lines.toDF(['Region','Country','Item_Type','Sales_Channel','Order_Priority','Order_Date','Order_ID','Ship_Date','Units_Sold','Unit_Price','Unit_Cost','Total_Revenue','Total_Cost','Total_Profit'])`

Я хочу сохранить любой фрейм данных в виде таблицы кустов

spark_df1.write.mode("overwrite").format("orc").saveAsTable("testdb.new_res5")

Первый кадр данных сохранен без проблем, но при попытке сохранить второй кадр данных (spark_df_test) таким же образом, я получил эту ошибку

Файл "/home/jup-user/testdb/scripts/caching.py", строка 90, в spark_df_test.write.mode ( "перезаписать"). Формат ( "орк"). saveAsTable ( "testdb. new_res5") Файл "/data_disk/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/spark/python/lib/pyspark.zip/pyspark/sql/readwriter.py", строка 435 , в saveAsTable Файл "/data_disk/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py ", линия 1257, в вызов Файл "/data_disk/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", строка 51 в деко pyspark.sql.utils.AnalysisException: 'Указание имени базы данных или других квалификаторов недопустимо для временных таблиц. Если имя таблицы содержит точки (.), Пожалуйста, заключите имя таблицы в кавычки (`).; '

1 Ответ

0 голосов
/ 26 октября 2018

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

Причина заключается в следующем код . Это гарантирует, что таблица существует для выдачи исключения. Идеальный способ - сохранить фрейм данных в новой таблице

spark_df_test.write.mode("overwrite").format("orc").saveAsTable("testdb.new_res6")

Или вы можете использовать 'insertInto'

spark_df_test.write.mode("overwrite").saveAsTable("temp_table")

Затем вы можете перезаписать строки в вашей целевой таблице

val tempTable = sqlContext.table("temp_table") 
tempTable
       .write
       .mode("overwrite").insertInto("testdb.new_res5")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...