如何GROUP BY
或将DISTINCT
与地图一起使用复杂类型的列?:
case class Foo(id:Int, stuff:Map[String, Int])
val xx = Seq(Foo(1, Map("first" -> 1, "second"->2)), Foo(1, Map("first" -> 1, "second"->2)), Foo(3, Map("fourth" -> 4, "fifth"->5))).toDF
xx.distinct.show
xx.groupBy("id", "stuff").count.show
错误是
expression `stuff` cannot be used as a grouping expression because its data type map<string,int> is not an orderable data type
也许已在Spark 2.4中修复?
但是,我目前仅限于2.2。 2.2有解决方案吗?
是否可以将其转换为json?我需要每个记录(spark dynamically create struct/json per group)具有不同字段的结构。
Seq[Foo]; case class Foo(column:String, column_value:String, value:String)
)数组。这样可以使DISTINCT
正常工作,但是对于任何第三方来说,格式似乎都不太直观