我对 scala 中的“each”和“_”符号感到困惑。我正在阅读一个示例
val school = list.map(each=>((each.school,each.payment),each.amount))
.reduceByKey(_+_)
.map(each=>(each._1,each._2))
对于列表中的每个元素,它需要学校、付款、金额,并通过将学校和付款作为关键来进行映射减少某种事情。
这行有
.map(each=>(each._1,each._2))
解释说,一旦完成reducebykey操作,它就会将学校和金额单独映射回学校。
请澄清我的理解。
最佳答案
首先,each
只是一个变量名称 - 您可以随意命名它:
.map(myTuple => (myTuple._1, myTuple._2))
更重要的是 - 最后一个映射实际上什么也没做。为什么?因为对于某些类型 K
和 V
,每个 reduceByKey
结果的类型为 (K, V)
- 的集合元组,当您为名为 each
的 2 元组调用 (each._1, every._2)
时,您只需创建一个新的 < em>相同元组。
更新:
如果您对 (school,totalAmount)
结果感兴趣,您应该只获取键的第一部分(它本身就是一个元组!):
.map(each => (each._1._1, each._2))
或者使用模式匹配的更好版本:
.map { case ((school, _), amount) => (school, amount) }
请注意,此结果可能包含具有相同 school
值的多个记录,因为键还包含 payment
部分。如果一所学校在输入中以不同的付款值出现两次 - 最后一个结果将不会具有唯一的 school
值。
关于scala - 与 scala 中的符号混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606277/