Spark SQL - 转换为数据集列的 UUID 引发解析异常

Posted

技术标签:

【中文标题】Spark SQL - 转换为数据集列的 UUID 引发解析异常【英文标题】:Spark SQL - Cast to UUID of the Dataset Column throws Parse Exception 【发布时间】:2018-03-29 20:27:54 【问题描述】:
Dataset<Row> finalResult = df.selectExpr("cast(col1 as uuid())", "col2");

当我们尝试将数据集中的列转换为 UUID 并保留在 Postgres 中时,我看到以下异常。请建议将数据集中的列转换为 UUID 的替代解决方案。

java.lang.RuntimeException: org.apache.spark.sql.catalyst.parser.ParseException: 
DataType uuid() is not supported.(line 1, pos 21)

== SQL ==
cast(col1 as UUID)
---------------------^^^

【问题讨论】:

【参考方案1】:

Spark 没有 uuid 类型,因此强制转换为一个类型是行不通的。

您可以尝试使用database.column.type 元数据属性,如Custom Data Types for DataFrame columns when using Spark JDBC 和SPARK-10849 中所述。

【讨论】:

我尝试了 MetadataBuilder,但它不起作用。我找到了工作,请在这里找到我的答案。***.com/questions/49625460

以上是关于Spark SQL - 转换为数据集列的 UUID 引发解析异常的主要内容,如果未能解决你的问题,请参考以下文章

每次转换/操作后 Spark Dataframe 随机 UUID 更改

从集合中随机替换 spark 数据集列值

计算数据集列的百分位数

需要根据 1 列的值设置数据集列中的值

使用来自另一个数据集的值搜索和更新 Spark 数据集列

如何在 Spark 流数据框中获取列的滞后?