Apache spark spark cassandra连接器-从Dataframe创建表-StructType?

Apache spark spark cassandra连接器-从Dataframe创建表-StructType?,apache-spark,cassandra,spark-cassandra-connector,Apache Spark,Cassandra,Spark Cassandra Connector,我正试图从Spark数据框给Cassandra写信。当我有一个简单的dataframe模式时,如示例中所示,它可以工作: root |-- id: string (nullable = true) |-- url: string (nullable = true) 但是,当我尝试编写包含StructTypes的数据帧时,使用如下模式: root |-- crawl: struct (nullable = true) | |-- id: string (nullable = tru

我正试图从Spark数据框给Cassandra写信。当我有一个简单的dataframe模式时,如示例中所示,它可以工作:

root
 |-- id: string (nullable = true)
 |-- url: string (nullable = true)
但是,当我尝试编写包含StructTypes的数据帧时,使用如下模式:

root
 |-- crawl: struct (nullable = true)
 |    |-- id: string (nullable = true)
val df = sqlContext.read.parquet(input)
df.createCassandraTable(keyspace, table)

df.write
  .format("org.apache.spark.sql.cassandra")
  .options(Map("table" -> table, "keyspace" -> keyspace))
  .save()
然后我得到以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: Unsupported type: StructType(StructField(id,StringType,true))
    at com.datastax.spark.connector.types.ColumnType$.unsupportedType$1(ColumnType.scala:132)
    at com.datastax.spark.connector.types.ColumnType$.fromSparkSqlType(ColumnType.scala:155)
    at com.datastax.spark.connector.mapper.DataFrameColumnMapper$$anonfun$1.apply(DataFrameColumnMapper.scala:18)
    at com.datastax.spark.connector.mapper.DataFrameColumnMapper$$anonfun$1.apply(DataFrameColumnMapper.scala:16)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at com.datastax.spark.connector.mapper.DataFrameColumnMapper.newTable(DataFrameColumnMapper.scala:16)
    at com.datastax.spark.connector.cql.TableDef$.fromDataFrame(Schema.scala:215)
    at com.datastax.spark.connector.DataFrameFunctions.createCassandraTable(DataFrameFunctions.scala:26)
我的代码如下所示:

root
 |-- crawl: struct (nullable = true)
 |    |-- id: string (nullable = true)
val df = sqlContext.read.parquet(input)
df.createCassandraTable(keyspace, table)

df.write
  .format("org.apache.spark.sql.cassandra")
  .options(Map("table" -> table, "keyspace" -> keyspace))
  .save()

帮助?

连接器目前似乎不支持从DataFrame结构动态创建UDT类型。您应该向Spark Cassandra连接器Jira添加一个票证,并将其作为功能请求。在准备就绪之前,您始终可以手动创建与结构类型匹配的新类型。

连接器目前似乎不支持从数据帧结构动态创建UDT类型。您应该向Spark Cassandra连接器Jira添加一个票证,并将其作为功能请求。在准备好之前,您始终可以手动创建一个新类型以匹配您的结构类型。

我也有同样的问题,您所说的“手动创建一个新类型以匹配您的结构”是什么意思,您能否对此进行详细说明?这意味着嵌套结构定义了udt。您必须在c*中定义一个UDT,并手动创建一个包含该UDT的表。我也有同样的问题,“手动创建一个新类型以匹配您的结构”是什么意思,请详细说明一下,这意味着嵌套结构定义了一个UDT。您必须在c*中定义一个UDT,并手动创建一个包含该UDT的表。