使用二进制(数组[字节])数据的 Spark 数据帧筛选器



我有一个来自JDBC表的数据帧访问MySql,我需要使用UUID过滤它。数据使用 binary(16( 存储在 MySql 中,当在 Spark 中查询时,会按预期转换为 Array[Byte]。

我是 Spark 的新手,并且一直在尝试各种方法将 UUID 类型的变量传递到 DataFrame 的过滤器方法中。 我尝试过这样的陈述

val id: UUID = // other logic that looks this up
df.filter(s"id = $id")
df.filter("id = " convertToByteArray(id))
df.filter("id = " convertToHexString(id))

所有这些错误都带有不同的消息。 我只需要以某种方式传入二进制类型,但似乎无法确定如何正确执行此操作。

任何帮助将不胜感激。

在网上查看了更多资源后,我找到了一种不使用过滤方法的方法。

当我从 sparkSession 读取时,我只使用临时表而不是表名,如下所示:

sparkSession.read.jdbc(connectionString, s"(SELECT id, {other col omitted) FROM MyTable WHERE id = 0x$id) AS MyTable", props)

这会为我预先过滤结果,然后我只需根据需要使用数据框。

如果有人知道使用过滤器的解决方案,我仍然很想知道它,因为这在某些情况下会很有用。

最新更新