使用SparkSQL HiveContext"INSERT INTO ..."

Kir*_*rst 22 apache-spark apache-spark-sql pyspark apache-spark-1.5 hivecontext

我正在尝试使用我的HiveContext运行一个insert语句,如下所示:

hiveContext.sql('insert into my_table (id, score) values (1, 10)')
Run Code Online (Sandbox Code Playgroud)

1.5.2星火SQL文件没有明确说明这是否是支持或不,虽然它不支持"动态分区插入".

这导致堆栈跟踪像

AnalysisException: 
Unsupported language features in query: insert into my_table (id, score) values (1, 10)
TOK_QUERY 0, 0,20, 0
  TOK_FROM 0, -1,20, 0
    TOK_VIRTUAL_TABLE 0, -1,20, 0
      TOK_VIRTUAL_TABREF 0, -1,-1, 0
        TOK_ANONYMOUS 0, -1,-1, 0
      TOK_VALUES_TABLE 1, 13,20, 41
        TOK_VALUE_ROW 1, 15,20, 41
          1 1, 16,16, 41
          10 1, 19,19, 44
  TOK_INSERT 1, 0,-1, 12
    TOK_INSERT_INTO 1, 0,11, 12
      TOK_TAB 1, 4,4, 12
        TOK_TABNAME 1, 4,4, 12
          my_table 1, 4,4, 12
      TOK_TABCOLNAME 1, 7,10, 22
        id 1, 7,7, 22
        score 1, 10,10, 26
    TOK_SELECT 0, -1,-1, 0
      TOK_SELEXPR 0, -1,-1, 0
        TOK_ALLCOLREF 0, -1,-1, 0

scala.NotImplementedError: No parse rules for:
 TOK_VIRTUAL_TABLE 0, -1,20, 0
  TOK_VIRTUAL_TABREF 0, -1,-1, 0
    TOK_ANONYMOUS 0, -1,-1, 0
  TOK_VALUES_TABLE 1, 13,20, 41
    TOK_VALUE_ROW 1, 15,20, 41
      1 1, 16,16, 41
      10 1, 19,19, 44
Run Code Online (Sandbox Code Playgroud)

是否有任何其他方式接入到一个蜂巢表支持?

Kir*_*rst 24

可以使用appendDataFrameWriter上的模式将数据附加到Hive表.

data = hc.sql("select 1 as id, 10 as score")
data.write.mode("append").saveAsTable("my_table")
Run Code Online (Sandbox Code Playgroud)

这给出了与插入相同的结果.

  • 这个答案对我来说不起作用.我收到一个错误:`AnalysisException:'不支持在Hive serde表中保存数据\`mytable \`.请使用insertInto()API作为替代..;'` (3认同)

Ber*_*ium 13

我遇到了同样的问题(Spark 1.5.1),并尝试了不同的版本.

特定

sqlContext.sql("create table my_table(id int, score int)")
Run Code Online (Sandbox Code Playgroud)

唯一有效的版本看起来像这样:

sqlContext.sql("insert into table my_table select t.* from (select 1, 10) t")
sqlContext.sql("insert into       my_table select t.* from (select 2, 20) t")
Run Code Online (Sandbox Code Playgroud)

  • 我们如何在查询中添加变量? (2认同)

abe*_*bop 8

接受的答案saveAsTable对我来说失败了AnalysisException(我不明白为什么).对我有用的是:

data = hc.sql("select 1 as id, 10 as score")
data.write.mode("append").insertInto("my_table")
Run Code Online (Sandbox Code Playgroud)

我正在使用Spark v2.1.0.