【发布时间】:2019-08-07 12:18:13
【问题描述】:
对于那些刚开始有经验的人来说,这个问题可能听起来很简单,但我想要实现的是以下...
我当前的Dataset[Row] 有一个Column('COLOR') 对象,其中包含一些值,red、blue 或green。
我要应用的逻辑是
given a Column value, check that the Row itself, so that its Columns contain certain properties accoridng to that value.
到目前为止,我知道我可以获取一个 Column 对象并通过给定条件过滤掉它的值,比如 .equalTo("this") 或 .gt(new Date()),但是如果我想根据可能的条件有条件地过滤整个 Column 怎么办? Column?中传入的值?
到目前为止,我的想法是执行.equalTo,其值是函数的结果...
def isValid(column: Column): String = ???
它在内部从Column 中检索值,应用case 并在验证成功时返回Column 的值,如果验证出错则返回空字符串。
还尝试在前面的方法中接收Row,但无法真正弄清楚如何使用返回util.List[Datum]的row.getData()。
这对我来说似乎过于设计了,必须有一个更简单的解决方案来在列中应用条件过滤。
编辑:
输入
id, color, fruit, origin, eaten
----------------------------------------
0, red, apple, france, true
1, blue, strawberry, spain, *doesn't exist in this Row*
如果我对(伪代码)应用过滤...
color match {
case 'blue' -> hasColumn('eaten') and isFruit('blueberry')
case 'red' -> hasColumn('eaten') and isFruit('apple')
}
应用过滤后,只有id == 0 应包含在数据集中。
【问题讨论】:
-
你能分享一个输入和期望输出的例子吗?
-
@czr_RR 你也可以分享输出数据集吗?如果我的问题是正确的,这可以通过使用 case 语句轻松实现。
-
*doesn't exist in this Row*是什么意思? -
@ShankarKoirala 我的意思是给定字段为空,而其他行确实包含该列的值。
-
@Goldie 输出是 Nir 在他的回答中发布的内容。
标签: apache-spark apache-spark-sql