在spark中过滤,选项或FlatMap

时间:2018-03-21 07:22:23

标签: scala apache-spark filter

我在Spark中有下一个代码:

dsPhs.filter(filter(_))
.map(convert)
.coalesce(partitions)
.filter(additionalFilter.IsValid(_))

转换函数中,我得到了更复杂的对象 - MyObject,所以我需要预先过滤基本对象。我有3个选择:

  1. 制作地图返回选项(MyObject)并在additionalFilter
  2. 过滤它
  3. 用flatMap替换map并在过滤时返回空数组
  4. 在map函数之前使用过滤器,在将RawObject转换为MyObject之前过滤掉它。
  5. 现在我选择选项3.但是可能更优选1或2?

1 个答案:

答案 0 :(得分:1)

如果对于选项2,您的意思是转换返回一个空数组,还有另一个选项:转换返回Option[MyObject]并使用flatMap而不是map。这有最好的选项1和2.在不了解您的用例的情况下,我无法确定这是否优于选项3,但这里有一些注意事项:

  1. convert是否应包含输入验证逻辑?如果是,请考虑修改它以返回Option
    • 如果使用convert或将在其他地方使用convert,他们是否可以从此验证中受益?
    • 作为旁注,这可能是考虑传递无效参数时convert当前所做的事情的好时机。
  2. 您可以轻松更改filter及其签名吗?如果没有,请考虑使用if