Pyspark Cassandra - создает правильный пользовательский тип (UDT) для столбца искровых данных с типом структуры "struct" - PullRequest
0 голосов
/ 31 октября 2018

Мой искровой фрейм данных имеет следующую схему:

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)

Я пытаюсь создать UDT в пространстве ключей Cassandra для обслуживания столбца 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 голосов
/ 31 октября 2018
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 в Кассандре

0 голосов
/ 31 октября 2018

Вам необходимо иметь следующее определение для пользовательского типа (см. документация ):

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