【问题标题】:How to filter a typed Spark Dataset using pattern matching如何使用模式匹配过滤类型化的 Spark 数据集
【发布时间】: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.filter{case (i,j) => i<j} // does not work

错误:(36, 14) 缺少扩展函数的参数类型 匿名函数的参数类型必须是完全已知的。 (SLS 8.5) 预期类型为:?

我不明白为什么模式匹配不适用于过滤器,而它适用于地图:

ds.map{case (i,j) => i+j}

【问题讨论】:

    标签: apache-spark apache-spark-dataset


    【解决方案1】:

    明确说明:

    ds.filter{x => x match { case (i,j) => i < j}}
    

    【讨论】:

    • 是的,这可行,但我仍然想知道为什么 filtermap 不同,尽管方法签名几乎相同
    【解决方案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._

      【讨论】:

      • 谢谢,不知道。但我认为这根本不更具可读性
      猜你喜欢
      • 2020-09-27
      • 2015-02-28
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多