看起来在web中找到的所有Spark示例都是作为单个长函数内置的(通常在main中(
但通常情况下,将长调用分解为如下函数是有意义的:
- 提高可读性
- 在解决方案路径之间共享代码
典型的签名如下所示(这是 Java 代码,但类似的签名将出现在所有语言中(
private static Dataset<Row> myFiltering(Dataset<Row> data) {
return data.filter(functions.col("firstName").isNotNull()).filter(functions.col("lastName").isNotNull());
}
这里的问题是Row
的内容没有安全性,因为字段上没有强制执行,调用函数不仅成为匹配单性的问题,而且成为Row
内容匹配的问题。 这显然可能会(在我的情况下确实(导致错误。
您在大规模开发环境中实施的最佳实践是什么? 您是否将代码保留为一个长函数? 您是否每次更改字段名称时都会受苦?
是的,您应该将方法拆分为较小的方法。请注意,许多小函数的可读性也不大;)
我的规则:
- 如果我们可以命名它,拆分一些转换链 - 如果我们有名称,这意味着这是某种子函数
- 如果同一域有许多函数 - 提取新类甚至包。
- KISS:如果你的函数调用链很短并且还描述了一些子函数,即使可以提取一些行,也不要拆分 - 阅读许多自定义函数的可读性并不高
- 任何更大的 - 不是 1-3 行 - 过滤器,我建议提取到方法并使用方法参考的映射
标记为社区维基,因为这只是我的观点,它是StackOverflow的OT。其他人还有其他建议,请分享:)