我们有一个 PostgreSQL 表,其中 UUID 作为列之一。我们如何将 Spark 数据集中的 UUID 字段(使用 Java)发送到 PostgreSQL DB。我们无法在 org.apache.spark.sql.types.DataTypes 中找到 uuid 字段。
请指教。
正如已经指出的那样,尽管解决了这些问题(10186、5753),但从uuidSpark 2.3.0 开始,仍然不支持Postgres 数据类型。
但是,有一种解决方法是使用 SparkSaveMode.Append并设置Postgres JDBC 属性以允许推断字符串类型。简而言之,它的工作原理如下:
val props = Map(
JDBCOptions.JDBC_DRIVER_CLASS -> "org.postgresql.Driver",
"url" -> url,
"user" -> user,
"stringtype" -> "unspecified"
)
yourData.write.mode(SaveMode.Append)
.format("jdbc")
.options(props)
.option("dbtable", tableName)
.save()
Run Code Online (Sandbox Code Playgroud)
该表应使用已用 type 定义的 uuid 列创建uuid。但是,如果您尝试让 Spark 2.3.0 创建此表,您将再次碰壁:
yourData.write.mode(SaveMode.Overwrite)
.format("jdbc")
.options(props)
.option("dbtable", tableName)
.option("createTableColumnTypes", "some_uuid_column_name uuid")
.save()
Run Code Online (Sandbox Code Playgroud)
结果:
不支持数据类型 uuid。(第 1 行,位置 21)
小智 2
是的,你没看错,SparkSQL 中没有 UUID 数据类型。将它们视为字符串应该可行,因为连接器会将字符串转换为 UUID。
我还没有尝试过 PostgreSQL,但是当我使用 Cassandra(和 Scala)时,它工作得很好。