spark cassandra使用区分大小写的名称编写udt失败

ct3nt3jp  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(429)

Spark连接器写入失败 java.lang.IllegalArgumentException: udtId is not a field defined in this definition 使用区分大小写的字段名时出错
我需要cassandra表中的字段来维护case。所以我用引号创造了它们。
我的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>>
);

我的sparkDataframe架构是

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)

除了用小写名称定义我的udt之外,还有其他方法可以让这个write工作吗?使它们小写将使我在任何地方调用案例管理代码这是使用,我想避免?
因为我写不成功,我试着读了吗?这也是阅读的问题吗?

ui7jx7zq

ui7jx7zq1#

您需要升级到spark cassandra connector 2.5.0-我找不到修复它的特定commit,或者提到它的特定jira-我怀疑它首先在datastax版本中修复,然后作为此处宣布的合并的一部分发布。
以下是它在SCC2.5.0+spark 2.4.6中的工作原理,而在SCC2.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()

相关问题