pyspark cassandra-为类型为“struct”的sparkDataframe列创建正确的用户定义类型(udt)

2ekbmq32  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(542)

我的sparkDataframe具有以下架构:

root
 |-- a: string (nullable = true)
 |-- b: long (nullable = true)
 |-- c: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- c1: string (nullable = true)
 |    |    |-- c2: double (nullable = true)
 |    |    |-- c3: long (nullable = true)

我试图在cassandra键空间中创建一个udt来满足c列的需要。这个新的udt将用于创建cassandra表来存储我的Dataframe。
但是,我的cql经常遇到语法错误。我的cql是:

"CREATE TYPE IF NOT EXISTS keyspace.my_udt(list<element frozen<c1 text, c2 double, c3 bigint>>);"

错误消息是:

SyntaxException: <Error from server: code=2000 [Syntax error in CQL query] message="line 1:50 no viable alternative at input '<' (... NOT EXISTS keyspace .my_udt(list[<]...)">

我对cql一点都不熟悉。有人能帮帮我吗?

krugob8w

krugob8w1#

CREATE TYPE IF NOT EXISTS keyspace.my_udt(c1 text, c2 double, c3 bigint);

CREATE TABLE example (id uuid,elements list<FROZEN <my_udt>>,primary key(id));

Cassandra的udt

dsekswqp

dsekswqp2#

用户定义类型需要有以下定义(请参阅文档):

CREATE TYPE IF NOT EXISTS my_udt(c1 text, c2 double, c3 bigint);

表格应该是:

CREATE TABLE my_table(a text, b bigint, c frozen<list<my_udt>>, primary key(a));

相关问题