首页 > 解决方案 > spark 2.2 无法处理聚合表达式中的映射列

问题描述

我怎样才能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

它似乎与https://mapr.com/support/s/article/Spark-SQL-queries-on-Map-column-fails-with-exception-Cannot-have-map-type-columns-in-有关数据框

也许在 spark 2.4 中修复?

但是,我目前仅限于 2.2。2.2有解决方案吗?

可以改为将其转换为json吗?我需要一个结构,每条记录具有不同的字段(spark 为每个组动态创建 struct/json)。

编辑

标签: apache-sparkdictionaryapache-spark-sqldistinct

解决方案


推荐阅读