【问题标题】:Cassandra Simple Insert Statement using Spark SQL Fails with org.apache.spark.sql.catalyst.parser.ParseException使用 Spark SQL 的 Cassandra 简单插入语句因 org.apache.spark.sql.catalyst.parser.ParseException 而失败
【发布时间】:2017-05-13 20:24:39
【问题描述】:

我正在尝试使用 Spark SQL 将数据插入 Cassandra 表,如下所示:

String query = "CREATE TEMPORARY TABLE my_table USING org.apache.spark.sql.cassandra OPTIONS (table \"my_table\",keyspace \"my_keyspace\", pushdown \"true\")";
                spark.sparkSession.sql(query);
                spark.sparkSession
                                .sql("INSERT INTO my_keyspace.my_table (column0, column1) VALUES ('value0', 'value1');

但是,它失败并出现以下异常: E

xception in thread "main" org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input 'column0' expecting {'(', 'SELECT', 'FROM', 'VALUES', 'TABLE', 'INSERT', 'MAP', 'REDUCE'}(line 1, pos 33)

我在没有列名的情况下尝试了它并且它有效。 我的意思是为某些列插入数据,而不是全部。

【问题讨论】:

    标签: apache-spark cassandra apache-spark-sql


    【解决方案1】:

    Spark SQL 不使用与 CQL 相同的语法,它们是不同的语言。查看 HiveQL 参考以获取更多信息。

    一个警告,通过 SparkSql 进行单行插入会很慢。它适用于大型多记录(数百万)插入。

    【讨论】:

    • 谢谢拉斯。我使用了 HiveQL 格式并且能够插入到表中。但是,我仍然有一个问题:如果一个表有 4 列,而我只需要将数据插入其中的三个(包括键),我该怎么做?目前出现如下错误:Cannot insert into table unknown because the number of columns are different: need 4 columns, but query has 3 columns
    • 你必须插入一个行结构我相信,SparkSQL 真的不适合做这种单独的插入......
    • 撇开评论,Cassandra CQL 是我的一个不错的选择;其中需要插入\更新各个行。不过需要深入了解@Cassandra batch
    • 我不确定你在说什么,cql 可以提供批处理... Spark SQL 用于处理已经存在于另一个分布式系统(如 hdfs 或 Cassandra 或其他数据库)中的数据。
    • 是的。我知道。我想说的是,对于单个插入,您可以直接使用 Cassandra CQL 驱动程序。但是,如果您使用 CQL,并且有时需要插入大量数据,那么您可以考虑批量学习。
    猜你喜欢
    • 2017-06-14
    • 2023-03-14
    • 2019-02-22
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2010-10-01
    • 2017-01-21
    • 2016-02-20
    相关资源
    最近更新 更多