有没有办法使用 Set
作为钥匙 Dataset#groupByKey
? 看起来,对于集合,spark使用了一个用于数组的编码器。这会导致集合中值的顺序更改结果。
举个例子:
import org.apache.spark.sql._
object Main extends App {
val spark =
SparkSession
.builder
.appName("spark")
.master("local")
.getOrCreate()
import spark.implicits._
println {
List("foo", "bar")
.toDS()
.groupByKey {
case "foo" => Set(1, 2)
case "bar" => Set(2, 1) // append .toList.sorted.toSet to get expected behavior
}
.keys
.collect
.mkString("\n")
}
spark.close()
}
我希望这能产生一把钥匙, Set(1, 2)
. 相反,它产生了两个。编码器看起来像是用于有序集合:
val e: Encoder[Set[Int]] = implicitly[Encoder[Set[Int]]]
println(s"${e}") // class[value[0]: array<int>]
这是虫子吗?是否应该为集合设置编码器?这可行吗?
暂无答案!
目前还没有任何答案,快来回答吧!