使用 spark 和 jdbc 将数组列写入 clickhouse

问题描述 投票:0回答:0

我正在尝试编写那个简单的数据框

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 中做到这一点。有人可以帮我吗?

apache-spark jdbc clickhouse
© www.soinside.com 2019 - 2024. All rights reserved.