【问题标题】:Pyspark Cassandra - Create correct User Defined Type (UDT) for spark dataframe column with type "struct"Pyspark Cassandra - 为类型为“struct”的 spark 数据框列创建正确的用户定义类型 (UDT)
【发布时间】:2019-04-04 08:47:09
【问题描述】:

我的 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 完全不熟悉。有人可以帮我吗?

【问题讨论】:

    标签: python apache-spark pyspark cassandra spark-cassandra-connector


    【解决方案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));
    

    【讨论】:

      【解决方案2】:
      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

      【讨论】:

        猜你喜欢
        • 2016-03-21
        • 2014-12-30
        • 2014-12-31
        • 1970-01-01
        • 1970-01-01
        • 2015-10-18
        • 2021-08-25
        • 1970-01-01
        • 2018-08-18
        相关资源
        最近更新 更多