【发布时间】:2019-12-05 14:13:47
【问题描述】:
上下文
在我编写的许多 sql 查询中,我发现自己以完全相同的方式组合 spark 预定义函数,这经常导致冗长和重复代码,而我的开发人员本能就是想要重构它。
所以,我的问题是:是否有某种方法可以为函数组合定义某种 别名 而无需诉诸 udfs(出于性能原因,这是为了避免) - 目标是使代码更清晰,更干净。本质上,我想要的是 udfs 之类的东西,但没有性能损失。此外,这些函数必须可以在可用于spark.sql 调用的 spark-sql 查询中调用。
示例
例如,假设我的业务逻辑是反转一些字符串并像这样对其进行哈希处理:(请注意,这里的函数组合是无关紧要的,重要的是它是现有预定义 spark 函数的某种组合 -可能很多)
SELECT
sha1(reverse(person.name)),
sha1(reverse(person.some_information)),
sha1(reverse(person.some_other_information))
...
FROM person
有没有一种方法可以声明business 函数而无需支付使用udf 的性能代价,允许将上面的代码重写为:
SELECT
business(person.name),
business(person.some_information),
business(person.some_other_information)
...
FROM person
我在 spark 文档和这个网站上搜索了很多,但没有找到实现这一点的方法,这对我来说很奇怪,因为它看起来很自然的需要,我不明白为什么您必须为定义和调用 udf 付出黑盒的代价。
【问题讨论】:
-
我想你可能已经回答了你自己的问题。
标签: apache-spark apache-spark-sql apache-spark-2.0