如何解决Spark Cassandra用区分大小写的名称编写UDT失败
- 使用区分大小写的字段名称时,火花连接器写入失败,并显示
java.lang.IllegalArgumentException: udtId is not a field defined in this definition
错误 - 我需要Cassandra表中的字段来维持大小写。所以我用过 用引号创建它们。
我的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)
- 除了使用小写字母名称定义udt之外,还有其他选择可以使此写入工作吗?将它们设置为小写将使我在所有使用此的情况下调用案例管理代码,我想避免这种情况?
- 因为我无法成功书写,所以我尝试阅读了吗?这也是阅读问题吗?
解决方法
您需要升级到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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。