是否应该将 Spark 转换分解为函数



看起来在web中找到的所有Spark示例都是作为单个长函数内置的(通常在main中(

但通常情况下,将长调用分解为如下函数是有意义的:

  1. 提高可读性
  2. 在解决方案路径之间共享代码

典型的签名如下所示(这是 Java 代码,但类似的签名将出现在所有语言中(

private static Dataset<Row> myFiltering(Dataset<Row> data) {
    return data.filter(functions.col("firstName").isNotNull()).filter(functions.col("lastName").isNotNull());
}

这里的问题是Row的内容没有安全性,因为字段上没有强制执行,调用函数不仅成为匹配单性的问题,而且成为Row内容匹配的问题。 这显然可能会(在我的情况下确实(导致错误。

您在大规模开发环境中实施的最佳实践是什么? 您是否将代码保留为一个长函数? 您是否每次更改字段名称时都会受苦?

是的,您应该将方法拆分为较小的方法。请注意,许多小函数的可读性也不大;)

我的规则:

  1. 如果我们可以命名它,拆分一些转换链 - 如果我们有名称,这意味着这是某种子函数
  2. 如果同一域有许多函数 - 提取新类甚至包。
  3. KISS:如果你的函数调用链很短并且还描述了一些子函数,即使可以提取一些行,也不要拆分 - 阅读许多自定义函数的可读性并不高
  4. 任何更大的 - 不是 1-3 行 - 过滤器,我建议提取到方法并使用方法参考的映射

标记为社区维基,因为这只是我的观点,它是StackOverflow的OT。其他人还有其他建议,请分享:)

最新更新