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

时间:2017-05-28 03:18:19

标签: scala apache-spark

我对Scala Spark比较陌生。我对map方法有疑问。

我的理解:map是一个RDD方法,它接受一个函数作为其参数,如:map(line => line.split(","))

我发现很难理解这种表达方式。

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

有人可以为我解释两件事:

  1. 为什么{}不使用()
  2. 我可以将case (user, product, price) => user视为一种功能吗?如果不是,它是什么?
  3. 提前谢谢。

1 个答案:

答案 0 :(得分:8)

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

从Scala-Doc定义部分功能

  

PartialFunction [A,B]类型的部分函数是一元函数   域不一定包括A类的所有值。   函数isDefinedAt允许动态测试值是否在   功能的领域。

{ case (user, product, price) => user }的情况下,您已经定义了一个将Tuple3对象作为输入的部分函数。此Tuple3对象被解压缩为userproductprice的3个变量,函数体只返回user

所以回答你的问题

  1. 为什么{}不使用()

    因为部分函数必须用花括号括起来。

  2. 我认为案例(用户,产品,价格)=>用户作为一个功能?如果没有,那是什么?

    是肯定的。 { case (user, product, price) => user }是一种称为PartialFunction的特殊函数,仅为特定输入定义,不为其他输入定义。在您的情况下,PartialFunction仅定义为Tuple3[T1,T2,T3]的输入,其中T1,T2和T3是用户,产品和价格对象的类型