Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala spark组未获取类型,不匹配错误_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

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)