如何使用模式匹配过滤类型化的 Spark 数据集
Posted
技术标签:
【中文标题】如何使用模式匹配过滤类型化的 Spark 数据集【英文标题】:How to filter a typed Spark Dataset using pattern matching 【发布时间】:2017-11-15 15:17:56 【问题描述】:我尝试跳转到类型化的数据集 API,但我遇到了过滤问题:
val ds: Dataset[(Int, Int)] = Seq((1,1)).toDS
ds.filter(ij => ij._1 > ij._2) // does work, but is not readable
ds.filtercase (i,j) => i<j // does not work
错误:(36, 14) 缺少扩展函数的参数类型 匿名函数的参数类型必须是完全已知的。 (SLS 8.5) 预期类型为:?
我不明白为什么模式匹配不适用于过滤器,而它适用于地图:
ds.mapcase (i,j) => i+j
【问题讨论】:
【参考方案1】:明确说明:
ds.filterx => x match case (i,j) => i < j
【讨论】:
是的,这可行,但我仍然想知道为什么filter
与 map
不同,尽管方法签名几乎相同【参考方案2】:
显然这是一个错误:https://issues.apache.org/jira/browse/SPARK-19492Tanks 到 Bodgan 获取信息
【讨论】:
【参考方案3】:这更具可读性:
val ds: Dataset[(Int, Int)] = Seq((1,1)).toDS
ds.filter('_1 > '_2)
注意:需要导入 spark.implicits._
【讨论】:
谢谢,不知道。但我认为这根本不更具可读性以上是关于如何使用模式匹配过滤类型化的 Spark 数据集的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark 中过滤 KeyValueGrouped 数据集
spark:模式更改——如果存在,则转换和过滤列上的数据框;如果没有就不要