添加具有优化功能的自定义功能(因此不作为UDF)

时间:2018-08-29 07:56:49

标签: scala apache-spark functional-programming apache-spark-sql

我正在努力优化当前作为UDF传递的自定义函数。我们通过如下所示的格式可配置地进行转换,因此无法按设置显式编码转换逻辑。

transforms: [

    {col: "id", expr: """ cast(someCustomFunction(aColumn) as string) """}
    {col: "date", expr: """ date_format(cast(unix_timestamp(someColumn, "yyyyMMddHHmmss") as Timestamp), "yyyyMMdd") """}
  ],

我已经注册了someCustomFunction,但是由于Spark黑盒UDF,我想通过某种方式不将其创建为UDF来优化此功能。我想知道实现此目标(然后安静地睡觉)的最佳方法是什么:

  1. 扩展催化剂选择器规则无济于事,因为我无法事先给出逻辑上的选择。
  2. 列函数如果我在何处/如何使用它们(如果有方法可以全部注册)
  3. 自定义转换:由于我传递了未知转换的字符串,因此如何实际使用自定义转换(代码会有所帮助)
  4. a.s.sql.functions软件包中的
  5. 注册自定义功能一样。此程序包中的所有实体都是受保护的或私有的。我是否必须将所有的spark代码复制到本地,添加我的函数,并让我的应用程序使用本地spark构建(我希望不是)。如果没有,那么扩展spark-sql以合并我的功能的正确方法是什么?
  6. 还有其他更容易错过的方式吗?

我已经努力解决了3天,因此任何帮助(最好是提供代码示例)都将是一个巨大的Karmic果仁巧克力蛋糕。

0 个答案:

没有答案