Spark代码中ordering.by、[(int,double),double]及case关键字含义咨询
Spark代码问题解答
Ordering.by的含义
Ordering.by是Scala标准库提供的排序工具方法,Spark的排序类算子可直接复用该能力。它接收一个键提取函数,生成对应数据类型的自定义排序器,可传入sortBy、orderBy等算子用于定义非默认的排序规则。
[(Int, Double), Double]的含义
这是Scala语法中的泛型参数声明,对应Ordering.by方法的泛型定义:
- 第一个参数
(Int, Double):代表待排序的元素是二元组类型,二元组第一个值为Int类型,第二个值为Double类型 - 第二个参数
Double:代表从待排序元素中提取的、用作排序依据的字段为Double类型
该声明的完整含义为:生成一个适配(Int, Double)类型元素的排序器,排序判断依据为从元素中提取的Double类型字段。 匿名函数中case关键字的作用
这里用到的是Scala的模式匹配匿名函数语法,和JavaScript的箭头函数属于完全不同的语法体系,不要混淆。
在匿名函数前加case的作用是自动对传入参数做解构匹配,可以直接拿到复杂结构(元组、样例类等)的对应字段,不需要手动编写属性提取代码,可读性更高。示例中针对二元组的写法case (_, score) => score,等价于普通匿名函数的tuple => tuple._2写法。
内容的提问来源于stack exchange,提问作者chucklai
相关产品推荐
相关产品推荐

