我对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
视为一种功能吗?如果不是,它是什么?提前谢谢。
答案 0 :(得分:8)
在Scala中,语法{ case arg => body }
是Partial Function。
从Scala-Doc定义部分功能
PartialFunction [A,B]类型的部分函数是一元函数 域不一定包括A类的所有值。 函数isDefinedAt允许动态测试值是否在 功能的领域。
在{ case (user, product, price) => user }
的情况下,您已经定义了一个将Tuple3对象作为输入的部分函数。此Tuple3对象被解压缩为user
,product
和price
的3个变量,函数体只返回user
。
所以回答你的问题
为什么{}不使用()
因为部分函数必须用花括号括起来。
我认为案例(用户,产品,价格)=>用户作为一个功能?如果没有,那是什么?
是肯定的。 { case (user, product, price) => user }
是一种称为PartialFunction的特殊函数,仅为特定输入定义,不为其他输入定义。在您的情况下,PartialFunction仅定义为Tuple3[T1,T2,T3]
的输入,其中T1,T2和T3是用户,产品和价格对象的类型