Scala spark组未获取类型,不匹配错误
我试图让这个变量Scala spark组未获取类型,不匹配错误,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,我试图让这个变量GroupsByP具有某种类型:GroupsByP是在db connection select/collect语句中定义的,它有3个字段:2个字符串(p和id)和一个int(order) 预期结果的形式应为Map[p,Set[(Id,Order)] 我希望此变量的类型为 Map[String, Set[(String, Int)]] 但实际值是Map[String,Set[(String,Array[Int])],如果我答对了你的问题,这应该可以: val GroupsByP
GroupsByP
具有某种类型:GroupsByP
是在db connection select/collect语句中定义的,它有3个字段:2个字符串(p
和id
)和一个int(order
)
预期结果的形式应为Map[p,Set[(Id,Order)]
我希望此变量的类型为
Map[String, Set[(String, Int)]]
但实际值是
Map[String,Set[(String,Array[Int])],
如果我答对了你的问题,这应该可以:
val GroupsByP: Map[String, Set[(String, Int)]] = input.collect()
.groupBy(_.p)
.map(group => group._1 -> group._2.map(record => (record.Id, record.Order)).toSet)
您应该将每个记录映射到一个(Id,Order)
元组中
一个非常类似但更具可读性的实现可能是:
val GroupsByP: Map[String, Set[(String, Int)]] = input.collect()
.groupBy(_.p)
.mapValues(_.map(record => (record.Id, record.Order)).toSet)
我想就是这样。qq为什么您没有使用下划线,而是使用了record?使用下划线作为匿名函数(如此函数)的输入参数意味着您只能使用该未命名参数一次-如果您尝试使用它两次(例如,
(
),您实际上是在创建一个包含两个参数的匿名函数(第一个下划线引用第一个,第二个下划线引用第二个)。这显然不是我们在这里需要的。换句话说,命名参数(在这里,我将其命名为record
——可以使用任何有意义的名称)通常是必须的。Undercode是应该小心使用的缩写。
val GroupsByP: Map[String, Set[(String, Int)]] = input.collect()
.groupBy(_.p)
.mapValues(_.map(record => (record.Id, record.Order)).toSet)