应该将Spark转换为功能

时间:2018-01-24 09:59:50

标签: apache-spark

看起来在web中找到的所有Spark示例都是作为单个long函数构建的(通常在main中)

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

  1. 提高可读性
  2. 在解决方案路径之间共享代码
  3. 典型的签名看起来像这样(这是Java代码,但类似的签名将出现在所有语言中)

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

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

    您在大型开发环境中实施的最佳做法是什么?你把代码留作一个长函数吗?你每次改变字段名称都会受苦吗?

1 个答案:

答案 0 :(得分:0)

是的,您应该将方法拆分为更小的方法。请注意,许多小功能也不太可读;)

我的规则:

  1. 如果我们可以命名的话,拆分一些转换链 - 如果我们有名字,就意味着这是某种子功能
  2. 如果同一个域有很多功能 - 提取新类甚至包。
  3. KISS:如果您的函数调用链很短并且还描述了一些子函数,即使可能提取某些行,也不会拆分 - 读取许多自定义函数的可读性不是很高
  4. 任何更大 - 不在1-3行 - 过滤器,地图我建议提取到方法并使用方法参考
  5. 标记为社区Wiki,因为这只是我的观点,也是StackOverflow的OT。其他人有任何其他建议,请分享:)