【问题标题】:spark-sql parse sql insert into errorspark-sql 解析 sql 插入错误
【发布时间】:2016-09-12 13:06:01
【问题描述】:
object Test {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("Spark SQL Example")
      .master("local")
      .getOrCreate()

//    val peopleDF = spark.read.json("yy/people.json")
//
//    peopleDF.write.parquet("people.parquet")

    val parquetFileDF = spark.read.parquet("people.parquet")

    parquetFileDF.createOrReplaceTempView("parquetFile")

    val namesDF = spark.sql("SELECT * FROM parquetFile")

    namesDF.show()

    val namesDF1 = spark.sql("insert into TABLE parquetFile (idx, name, age) values (200, \"hello\", 78)")

  }
}

代码起来了,下面是输出!,插入不能在值前添加列名。

16/09/12 20:50:22 INFO CodeGenerator: Code generated in 16.608273 ms

+----+---+-------+
| age|idx|   name|
+----+---+-------+
|null|100|Michael|
|  30|200|   Andy|
|  19|100| Justin|
+----+---+-------+

16/09/12 20:50:22 INFO SparkSqlParser: Parsing command: insert into TABLE parquetFile (idx, name, age) values (200, "hello", 78)
Exception in thread "main" org.apache.spark.sql.catalyst.parser.ParseException: 
mismatched input 'idx' expecting {'(', 'SELECT', 'FROM', 'VALUES', 'TABLE', 'INSERT', 'MAP', 'REDUCE'}(line 1, pos 31)

== SQL ==
insert into TABLE parquetFile (idx, name, age) values (200, "hello", 78)
-------------------------------^^^

at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:197)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:99)
at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:46)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:53)
at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:582)
at Test$.main(Test.scala:32)
at Test.main(Test.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
16/09/12 20:50:22 INFO SparkContext: Invoking stop() from shutdown hook
16/09/12 20:50:22 INFO SparkUI: Stopped Spark web UI at http://10.100.26.199:4040
16/09/12 20:50:22 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
16/09/12 20:50:22 INFO MemoryStore: MemoryStore cleared
16/09/12 20:50:22 INFO BlockManager: BlockManager stopped
16/09/12 20:50:22 INFO BlockManagerMaster: BlockManagerMaster stopped
16/09/12 20:50:22 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
16/09/12 20:50:22 INFO SparkContext: Successfully stopped SparkContext
16/09/12 20:50:22 INFO ShutdownHookManager: Shutdown hook called
16/09/12 20:50:22 INFO ShutdownHookManager: Deleting directory /tmp/spark-7229faa1-ed36-4989-a087-eb453e9f9295

Process finished with exit code 1

【问题讨论】:

  • 尽量省略列名并为所有列提供值。在您的情况下: val namesDF1 = spark.sql("insert into TABLE parquetFile values (200, \"hello\", 78)")

标签: apache-spark apache-spark-sql parquet


【解决方案1】:

首先,您在临时视图上调用 INSERT,而不是在某个表上。

其次,应该是INSERT INTO TableName而不是INSERT INTO TABLE TableName

【讨论】:

  • 嗨,非常感谢!我尝试insert into TABLE parquetFile values (200, \"hello\", 78) 效果很好,如果我在sql中添加列名,会抛出这个错误。
  • 嗨。在相同的情况下,我有完全相同的错误。你解决了吗?
  • Spark SQL 接受 Hive 语法,Hive 接受 INSERT INTO 和 INSERT INTO TABLE。
【解决方案2】:

我在我的场景中遇到了同样的错误。请参考下文

我从下面的 sql 得到的错误:

插入员工 ( id , name , age ) SELECT id , name , age from Employee2

使用以下状态修复

从 Employee2 插入 Employee SELECT id , name , age

cmets:我们不需要在插入语句中单独指定所有列,而是我们可以更改 select(这可能是 spark 要求)无论如何它对我有用

【讨论】:

  • 这对我有用,但你将如何插入有限数量的列?
【解决方案3】:

我遇到了同样的问题。插入 TableName 并删除列名规范有效。我希望它也可以与列名一起使用,因此我将集群更改为以下内容:

8.1, Spark: 3.1.1 , Single Node, Scala 2.12, Standard DS3 V2

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2017-04-28
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多