Pyspark Cassandra-为类型为“ struct”的spark数据框列创建正确的用户定义类型(UDT)

时间:2018-10-31 08:22:49

标签: python apache-spark cassandra pyspark

我的spark数据框具有以下架构:

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表来存储我的数据框。

但是,我的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。有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

对于用户定义类型,您需要具有以下定义(请参见documentation):

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));

答案 1 :(得分:0)

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));

UDT in Cassandra