在Scalding中,假设您有TypedPipe[Long]
或ValuePipe[Long]
。您将如何以最优雅/最有效的方式检查它们是否为空?
目前正在测试以下内容:
val isTPEmpty: Boolean = typePipe.equals(TypedPipe.empty)
val isVPEmpty: Boolean = valuePipe.equals(EmptyValue)
或者,使它更通用:
def isTypedPipeEmpty[A](typedPipe: TypedPipe[A]): Boolean = {
val emptyTP: TypedPipe[A] = TypedPipe.empty
typedPipe.equals(emptyTP)
}
更新:这不起作用(对于空false
将返回TypedPipe
)。感谢任何投入。
答案 0 :(得分:1)
在与几个人谈到这个问题之后,没有直接的解决方案只是因为分配了TypedPipe,并且检查它是否为空是昂贵的,因此应该尽可能地避免这种情况。 / p>
如果你别无选择,那对我有用的东西就是"丑陋的"创建一个临时空的TypedPipe,然后在我的ValuePipe上调用mapWithValue
,如果它是空的,则执行X,否则执行Y.类似于:
TypedPipe.from(List()).mapWithValue(valuePipe) { case (temp, valuePipe) => if (valuePipe.isEmpty) doX else doY }
但又是,麻烦。