如何在 Scalding 中检查 TypedPipe 或 ValuePipe 是否为空?
How to check if a TypedPipe or a ValuePipe are empty in Scalding?
在 Scalding 中,假设您有 TypedPipe[Long]
或 ValuePipe[Long]
。您将如何以最 elegant/efficient 的方式检查它们是否为空?
目前正在测试以下内容:
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)
}
更新:这不起作用(将 return false
用于空 TypedPipe
)。感谢任何输入。
和几个人谈过后,没有直接的解决方案,因为分发了一个TypedPipe,检查它是否为空是"expensive",所以应该尽可能避免这种情况。
如果你别无选择,对我有用的是 "ugly" 创建一个临时的空 TypedPipe,然后在我的 ValuePipe 上调用 mapWithValue
,如果它是空的,则执行 X,否则做 Y。像这样:
TypedPipe.from(List()).mapWithValue(valuePipe) { case (temp, valuePipe) => if (valuePipe.isEmpty) doX else doY }
但又很麻烦。
在 Scalding 中,假设您有 TypedPipe[Long]
或 ValuePipe[Long]
。您将如何以最 elegant/efficient 的方式检查它们是否为空?
目前正在测试以下内容:
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)
}
更新:这不起作用(将 return false
用于空 TypedPipe
)。感谢任何输入。
和几个人谈过后,没有直接的解决方案,因为分发了一个TypedPipe,检查它是否为空是"expensive",所以应该尽可能避免这种情况。
如果你别无选择,对我有用的是 "ugly" 创建一个临时的空 TypedPipe,然后在我的 ValuePipe 上调用 mapWithValue
,如果它是空的,则执行 X,否则做 Y。像这样:
TypedPipe.from(List()).mapWithValue(valuePipe) { case (temp, valuePipe) => if (valuePipe.isEmpty) doX else doY }
但又很麻烦。