Apache spark 为什么insertInto在处理非默认数据库中的表时失败?
我正在使用Spark 1.4.0(PySpark)。我使用以下查询从配置单元表加载了一个数据帧:Apache spark 为什么insertInto在处理非默认数据库中的表时失败?,apache-spark,hive,pyspark,apache-spark-sql,apache-spark-1.4,Apache Spark,Hive,Pyspark,Apache Spark Sql,Apache Spark 1.4,我正在使用Spark 1.4.0(PySpark)。我使用以下查询从配置单元表加载了一个数据帧: sqlContext = HiveContext(sc) table1_contents = sqlContext.sql("SELECT * FROM my_db.table1") 当我尝试在一些转换后使用DataFrameWriter#insertInto函数将数据从表1_内容插入到表2中时: sqlContext.createDataFrame(transformed_data_from_t
sqlContext = HiveContext(sc)
table1_contents = sqlContext.sql("SELECT * FROM my_db.table1")
当我尝试在一些转换后使用DataFrameWriter#insertInto函数将数据从表1_内容插入到表2中时:
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。有人能帮我解决这个问题吗?我没法回答
sqlContext.createDataFrame(从表1转换而来的数据)。write.insertInto('my\u db.table2')
然而,SparkSQL似乎支持INSERT
语句作为字符串
sqlContext.sql(“插入到表my_db.table2…”)代码>
这一个有效
尽管我仍然期待着我最初的问题能够得到回答并开始工作(如果这是一个bug,希望能在Spark的未来版本上工作)。我无法回答
sqlContext.createDataFrame(从表1转换而来的数据)。write.insertInto('my\u db.table2')
然而,SparkSQL似乎支持INSERT
语句作为字符串
sqlContext.sql(“插入到表my_db.table2…”)代码>
这一个有效
尽管我仍然期待着我最初的问题能够得到回答并开始工作(如果这是一个bug,希望能在Spark的未来版本上工作)。我也有类似的问题。看起来insertInto函数在写入非默认数据库时可能有一些错误。在我将目标表更改为默认数据库后,它工作正常。我遇到了类似的问题。看起来insertInto函数在写入非默认数据库时可能有一些错误。在我将目标表更改为默认数据库后,它工作正常。这是一个错误。显然,这个问题只有在即将发布的1.6.0版本中才能得到解决
作为一种解决方法,您可以按照您所说的做,或者使用@Guosian提到的默认数据库。您还可以试用1.6.0-SNAPSHOT版本
编辑:我链接的JIRA问题是针对Spark Scala版本的,所以我不能说这个问题是否在PySpark v 1.6.0中得到了解决。很抱歉造成混淆。这是一个错误。显然,这个问题只有在即将发布的1.6.0版本中才能得到解决
作为一种解决方法,您可以按照您所说的做,或者使用@Guosian提到的默认数据库。您还可以试用1.6.0-SNAPSHOT版本
编辑:我链接的JIRA问题是针对Spark Scala版本的,所以我不能说这个问题是否在PySpark v 1.6.0中得到了解决。很抱歉给您添麻烦。您好,我不知道您是否已经解决了这个问题。在我的工作中,我遇到了类似的问题,我解决了它。我的spark版本是1.40,因此我认为@Ton Torres程序中没有bug。问题是您使用了sqlContext而不是hiveContext。当您需要操作hive时,最好使用hiveContext创建如下数据帧
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
dfresult = hiveContext.createDataFrame(temp,structType)
hiveContext.sql("use default")
dtResult.write.insertInto("tablename")
祝你好运嗨,我不知道你是否解决了这个问题。在我的工作中,我遇到了类似的问题,我解决了它。我的spark版本是1.40,因此我认为@Ton Torres程序中没有bug。问题是您使用了sqlContext而不是hiveContext。当您需要操作hive时,最好使用hiveContext创建如下数据帧
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
dfresult = hiveContext.createDataFrame(temp,structType)
hiveContext.sql("use default")
dtResult.write.insertInto("tablename")
祝你好运我的sqlContext是一个HiveContext。请参阅我的代码的第一行。我的sqlContext是一个HiveContext。请参阅我的代码的第一行。