我正在尝试对Hive执行此SQL插入语句:
insert into mydb.mytable (k, v) values (3, 'c'), (4, 'd')
如果我使用DBeaver,则此SQL语句有效。但是,当我使用PySpark
REPL时,我得到以下异常。
Traceback (most recent call last): File "", line 1, in File "/usr/hdp/2.4.2.0-258/spark/python/pyspark/sql/context.py", line 580, in sql return DataFrame(self._ssql_ctx.sql(sqlQuery), self) File "/usr/hdp/2.4.2.0-258/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 813, in __call__ File "/usr/hdp/2.4.2.0-258/spark/python/pyspark/sql/utils.py", line 51, in deco raise AnalysisException(s.split(': ', 1)[1], stackTrace) pyspark.sql.utils.AnalysisException: u"\nUnsupported language features in query: insert into mydb.mytable (k, v) values (3, 'c'), (4, 'd')\nTOK_QUERY 0, 0,30, 0\n TOK_FROM 0, -1,30, 0\n TOK_VIRTUAL_TABLE 0, -1,30, 0\n TOK_VIRTUAL_TABREF 0, -1,-1, 0\n TOK_ANONYMOUS 0, -1,-1, 0\n TOK_VALUES_TABLE 1, 15,30, 39\n TOK_VALUE_ROW 1, 17,22, 39\n 3 1, 18,18, 39\n 'c' 1, 21,21, 42\n TOK_VALUE_ROW 1, 25,30, 49\n 4 1, 26,26, 49\n 'd' 1, 29,29, 52\n TOK_INSERT 1, 0,-1, 12\n TOK_INSERT_INTO 1, 0,13, 12\n TOK_TAB 1, 4,6, 12\n TOK_TABNAME 1, 4,6, 12\n jvang 1, 4,4, 12\n test1 1, 6,6, 18\n TOK_TABCOLNAME 1, 9,12, 25\n k 1, 9,9, 25\n v 1, 12,12, 28\n TOK_SELECT 0, -1,-1, 0\n TOK_SELEXPR 0, -1,-1, 0\n TOK_ALLCOLREF 0, -1,-1, 0\n\nscala.NotImplementedError: No parse rules for:\n TOK_VIRTUAL_TABLE 0, -1,30, 0\n TOK_VIRTUAL_TABREF 0, -1,-1, 0\n TOK_ANONYMOUS 0, -1,-1, 0\n TOK_VALUES_TABLE 1, 15,30, 39\n TOK_VALUE_ROW 1, 17,22, 39\n 3 1, 18,18, 39\n 'c' 1, 21,21, 42\n TOK_VALUE_ROW 1, 25,30, 49\n 4 1, 26,26, 49\n 'd' 1, 29,29, 52\n \norg.apache.spark.sql.hive.HiveQl$.nodeToRelation(HiveQl.scala:1362)\n ;"
我的代码就是以下内容。
sql = "insert into mydb.mytable (k, v) values (3, 'c'), (4, 'd')"
sqlContext.sql(sql)
有关为何发生这种情况的任何想法?有什么办法可以通过PySpark将行追加到现有的Hive表中吗?我已经看过一些使用多个SQL插入语句的例子,但我认为这看起来并不合适;我本质上是尝试通过PySpark批量导入(追加模式)到现有的Hive表中。
我正在使用
答案 0 :(得分:0)
我在Spark 1.6中也遇到了错误
java.sql.SQLException:org.apache.spark.sql.AnalysisException: org.apache.spark.sql.hive.HiveQl $ .nodeToRelation(HiveQl.scala:1362)
搜索后,发现错误消失后,spark 1.6使用了不同的语法。
示例:
insert into table mytable1 select t.* from (select 'Shub',30) t;
来源:
https://html.developreference.com/article/15215006/SPARK+1.6+Insert+into+existing+Hive+table+