Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 为什么insertInto在处理非默认数据库中的表时失败?_Apache Spark_Hive_Pyspark_Apache Spark Sql_Apache Spark 1.4 - Fatal编程技术网

Apache spark 为什么insertInto在处理非默认数据库中的表时失败?

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

我正在使用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_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。请参阅我的代码的第一行。