在 org.apache.spark.sql.types.DataTypes 中找不到 uuid
Posted
技术标签:
【中文标题】在 org.apache.spark.sql.types.DataTypes 中找不到 uuid【英文标题】:Cant find uuid in org.apache.spark.sql.types.DataTypes 【发布时间】:2017-11-18 17:24:31 【问题描述】:我们有一个 PostgreSQL 表,其中 UUID 作为列之一。我们如何将 Spark 数据集中的 UUID 字段(使用 Java)发送到 PostgreSQL DB。 我们无法在 org.apache.spark.sql.types.DataTypes 中找到 uuid 字段。
请指教。
【问题讨论】:
你是怎么解决的@Venu 【参考方案1】:正如已经指出的那样,尽管有这些已解决的问题(10186、5753),但从 Spark 2.3.0 开始,仍然不支持 uuid
Postgres 数据类型。
但是,there's a workaround 通过使用 Spark 的 SaveMode.Append
并设置 Postgres JDBC property to allow string types to be inferred。简而言之,它的工作原理如下:
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()
应该使用已使用类型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()
结果:
不支持数据类型 uuid。(第 1 行,第 21 行)
【讨论】:
未指定的字符串类型拯救了我的一天!【参考方案2】:是的,你是对的,SparkSQL 中没有 UUID 数据类型。将它们视为字符串应该可以工作,因为连接器会将字符串转换为 UUID。
我没有尝试过使用 PostgreSQL,但是当我使用 Cassandra(和 Scala)时,它可以完美运行。
【讨论】:
感谢您的快速回复。但是当我作为字符串发送时,我收到一个错误:org.postgresql.util.PSQLException: ERROR: column "myColumnName" is of type uuid but expression is of type character varying org.postgresql.util.PSQLException: ERROR: column "cashed_UUID" is of type uuid but expression is of type character varying 提示:您需要重写或转换表达式。 我在尝试这个解决方案时遇到了同样的错误。 @Venu 你是怎么解决的;我们也遇到了同样的错误org.postgresql.util.PSQLException: ERROR: column "myColumnName" is of type uuid but expression is of type character varying
。请帮助我们提供示例代码以上是关于在 org.apache.spark.sql.types.DataTypes 中找不到 uuid的主要内容,如果未能解决你的问题,请参考以下文章
在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?