gpt4 book ai didi

scala - 我无法理解 Scala Spark 中的 'RDD.map{ case (A, B) => A } '

转载 作者:行者123 更新时间:2023-12-01 08:50:24 29 4
gpt4 key购买 nike

我对 Scala Spark 比较陌生。我有一个关于 map 方法的问题。

我的理解:map 是一种 RDD 方法,它接受一个函数作为其参数,例如:map(line => line.split(","))
我发现很难理解这种表达方式。

val uniqueUsers = data.map { case (user, product, price) => user }.distinct().count()

有人可以为我解释两件事:
  • 为什么不使用 {} ()
  • 我可以考虑case (user, product, price) => user作为函数?如果不是,那是什么?

  • 先感谢您。

    最佳答案

    在 Scala 中,语法 { case arg => body }Partial Function .

    Scala-Doc 中偏函数的定义

    A partial function of type PartialFunction[A, B] is a unary function where the domain does not necessarily include all values of type A. The function isDefinedAt allows to test dynamically if a value is in the domain of the function.



    在您的情况下 { case (user, product, price) => user }你已经定义了一个偏函数,它接受一个 Tuple3 对象作为输入。这个 Tuple3 对象被解压为 user 的 3 个变量, productprice函数体只返回 user .

    所以回答你的问题
  • 为什么使用 {} not ()

    因为部分函数必须用花括号括起来。
  • 一个我把案例(用户、产品、价格)=> 用户作为一个函数?如果不是,那是什么?

    是的。 { case (user, product, price) => user }是一种特殊类型的函数,称为 PartialFunction仅针对特定输入定义,未针对其他输入定义。在您的情况下, PartialFunction 仅针对 Tuple3[T1,T2,T3] 的输入定义其中 T1、T2 和 T3 是用户、产品和价格对象的类型
  • 关于scala - 我无法理解 Scala Spark 中的 'RDD.map{ case (A, B) => A } ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44223483/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com