我正在尝试编写那个简单的数据框
val df = Seq(
List("aa","bb","cc"),
List("aa","bb","cc"),
List("aa","bb","cc")
).toDF("str")
到 clickhouse 表
CREATE TABLE IF NOT EXISTS testtable (
str Array(String)
) ENGINE = Memory
即写作过程:
df.write
.format("jdbc")
.mode("append")
.option("driver", "com.clickhouse.jdbc.ClickHouseDriver")
.option("url", "jdbcurl")
.option("user", "user")
.option("password", "password")
.option("dbtable", "testtable")
.save
在处理过程中我遇到了这个错误:
java.lang.IllegalArgumentException:无法获取数组的 JDBC 类型
我尝试以这种方式将数组转换为字符串
df.withColumn("str", concat_ws(",", $"str"))
,但后来我遇到了这个错误:
java.sql.SQLException:不支持的类型 ARRAY
与此同时,数据已写入数据库,但不是我预期的格式(["aa,bb,cc"] 而不是 ["aa", "bb", "cc"] - 三个分隔值)。 官方 clickhouse-java 文档也提到,如果你想使用数组,你必须使用
setArray
函数准备语句,但我不明白,我究竟如何才能在 spark 中做到这一点。有人可以帮我吗?