Spark Cassandra 使用区分大小写的名称写入 UDT 失败

Spark Cassandra Write UDT With Case-Sensitive Names Fails

我的 Cassandra 模式

CREATE TYPE my_keyspace.my_udt (
  "udtId" text,
  "udtValue" text
);

CREATE TABLE my_keyspace.my_table (
  "id" text PRIMARY KEY,
  "someCol" text,
  "udtCol" list<frozen<my_udt>>
);

我的 Spark DataFrame 架构是

root
 |-- id: string (nullable = true)
 |-- someCol: string (nullable = true)
 |-- udtCol: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- udtId: string (nullable = true)
           |-- udtValue: string (nullable = true)

您需要升级到 Spark Cassandra Connector 2.5.0 - 我找不到修复它的特定提交,或提到的特定 Jira - 我怀疑它首先在 DataStax 版本中修复,然后发布作为合并的一部分宣布 here

以下是它在 SCC 2.5.0 + Spark 2.4.6 中的工作方式,而在 SCC 2.4.2 + Spark 2.4.6 中则失败:

scala> import org.apache.spark.sql.cassandra._
import org.apache.spark.sql.cassandra._

scala> val data = spark.read.cassandraFormat("my_table", "test").load()
data: org.apache.spark.sql.DataFrame = [id: string, someCol: string ... 1 more field]

scala> val data2 = data.withColumn("id", concat(col("id"), lit("222")))
data2: org.apache.spark.sql.DataFrame = [id: string, someCol: string ... 1 more field]

scala> data2.write.cassandraFormat("my_table", "test").mode("append").save()