【发布时间】:2017-06-05 05:01:59
【问题描述】:
我有以下 Cassandra DM:
CREATE TABLE table (
id uuid,
timestamp timestamp STATIC,
value1 text STATIC,
value2 int,
value3 text,
data map <text,text>,
PRIMARY KEY ( id, value2 )
);
到目前为止一切顺利。现在我必须先插入我想插入的格式类型:
INSERT INTO table (id, timestamp, value1)
VALUES (<uuid>,<timestamp>,<some-string>);
和
INSERT INTO table (id, value2, value3, data)
VALUES (<some-id>,<some-int>,<some-string>, <some-simple-json-map>)
两个 CQL 语句都可以正常工作。 现在我正在开发我的 spark 流应用程序来获取数据并将其格式化为类似于我的 CQL 语句样式的数据帧。我为每组语句 1 得到几组语句 2。
现在我在保存数据帧时遇到问题,例如第一个 CQL 语句 spark 引发 cassandra 异常:
java.lang.IllegalArgumentException:
Some primary key columns are missing in RDD or have not been selected: value2
at com.datastax.spark.connector.writer.TableWriter$.checkMissingPrimaryKeyColumns(TableWriter.scala:190)
at com.datastax.spark.connector.writer.TableWriter$.checkColumns(TableWriter.scala:257)
at com.datastax.spark.connector.writer.TableWriter$.apply(TableWriter.scala:275)
at com.datastax.spark.connector.RDDFunctions.saveToCassandra(RDDFunctions.scala:36)
...
这里是我的数据框的架构:
root
|-- id: string (nullable = true)
|-- timestamp: long (nullable = true)
|-- value1: string (nullable = true)
我的存档:
data.select("id", "timeStamp", "value1")
.write.format("org.apache.spark.sql.cassandra")
.mode(SaveMode.Append)
.options(Map("keyspace" -> "some_keyspace","table" -> "table"))
.save()
当我将值 2 列添加到我的数据框时,该语句工作正常。
root
|-- id: string (nullable = true)
|-- timestamp: long (nullable = true)
|-- value1: string (nullable = true)
|-- value2: integer (nullable = false)
有没有办法让它像 CQL 语句一样工作而不更改数据模型?
【问题讨论】:
-
看起来像静态列的错误,你应该提交一个 Jira
标签: apache-spark cassandra apache-spark-sql cql spark-cassandra-connector