0

Я использую Spark 1.4.0 (PySpark). У меня есть DataFrame загружены из улья таблицы, используя этот запрос:Почему функция insertInto не работает при работе с таблицами в базе данных, отличной от настроек по умолчанию?

sqlContext = HiveContext(sc) 
table1_contents = sqlContext.sql("SELECT * FROM my_db.table1") 

При попытке вставить данные из table1_contents после некоторых преобразований в table2 используя функцию DataFrameWriter # insertInto:

sqlContext.createDataFrame(transformed_data_from_table1).write.insertInto('my_db.table2') 

я встречаю эту ошибку :

py4j.protocol.Py4JJavaError: An error occurred while calling o364.insertInto. 
: org.apache.spark.sql.AnalysisException: no such table my_db.table2; 

Я знаю, что моя таблица существующих, потому что, когда я типа:

print sqlContext.tableNames('my_db') 

показаны таблицы 1 и таблица2. Может ли кто-нибудь помочь в решении этой проблемы?

ответ

0

я не был в состоянии сделать

sqlContext.createDataFrame(transformed_data_from_table1).write.insertInto('my_db.table2')

работает, однако, кажется SparkSQL поддерживает INSERT заявления как строки.

sqlContext.sql("INSERT INTO TABLE my_db.table2...");

и это работает.

Хотя я до сих пор с нетерпением жду времени, когда на мой оригинальный вопрос будет дан ответ и работа (надеюсь, в будущей версии Spark, если это ошибка).

3

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

1

Это reported bug. По-видимому, проблема разрешена только в следующей версии 1.6.0.

В качестве обходного пути вы можете делать то, что вы сказали, или использовать базу данных по умолчанию, как указано в @guoxian. Вы также можете попробовать версию 1.6.0-SNAPSHOT.

EDIT: проблема JIRA, связанная с версией Spark Scala, поэтому я не могу сказать, исправлена ​​ли эта проблема в PySpark v 1.6.0. Извините за путаницу.

1

Привет, я не знаю, решила ли вы проблему. В моей работе я получил аналогичную проблему, и я решил ее. Моя искра версии 1,40, и поэтому я думаю, что в программе @Ton Torres нет ошибок. Проблема в том, что вы использовали sqlContext вместо hiveContext. Когда вам нужно работать улей вам лучше использовать hiveContext создать DataFrame как этот

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) 
    dfresult = hiveContext.createDataFrame(temp,structType) 
    hiveContext.sql("use default") 
    dtResult.write.insertInto("tablename") 

мая удачи

+0

Мой sqlContext является HiveContext. Посмотрите первую строку моего кода. – menorah84

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

  • Нет связанных вопросов^_^