scala - 与 scala 中的符号混淆

标签 scala dictionary

我对 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))

更重要的是 - 最后一个映射实际上什么也没做。为什么?因为对于某些类型 KV,每个 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/

相关文章:

python 字典排序奇怪(想要非字母顺序)

c# - 在 C# webservice 中使用 NameValueCollection 给出了 not XML serializable 错误

c# - .NET 字典中的重复键?

r - 在quanteda中应用字典时提取顶部正负特征

scala - 如何用 mixin 实现 F 有界多态性?

scala - 在scala中,如何避免类方法被伴随对象隐藏

scala - Akka Actor - 创建 Actor 池

c++ - 在 C++ 中执行 Map<Key, Map<Key, Set<Class>>> 是很痛苦的。有没有更好的办法?

scala - 使用作为字符串数组的行字段过滤 Spark 数据帧

scala - Spark 的 toDS 与 DF