group by 子句中的 sparkSQL Map 列

Posted

技术标签:

【中文标题】group by 子句中的 sparkSQL Map 列【英文标题】:sparkSQL Map column in group by clause 【发布时间】:2017-01-07 19:59:37 【问题描述】:

我正在将查询从 Hive 迁移到 SparkSQL,但是遇到了 Map 列的一个问题。

我的查询是

spark.sql(select col1,col2,my_map,count(*) from table group by col1,col2,my_map)

我得到的错误是

`my_map` cannot be used as a grouping expression because its data type map<string,string> is not an orderable data type.;

my_map 中的键总是不同的。我尝试使用已弃用的 HiveContext,但这并没有帮助。有什么解决方法吗?

谢谢!

【问题讨论】:

按地图分组似乎是一个相当微妙的操作。你确定你真的想这样做吗?无论如何,您可以考虑在执行此查询之前对映射进行规范化(尤其是如果您希望只有几个键),否则您应该将其来回转换为可以由 sql 轻松处理的另一种格式。 @Chobeat 到目前为止,我一直在 Hive 中这样做。知道如何将它来回转换为另一种格式吗? 元组列表可能是一种选择,我相信它应该可以工作。但是要小心,这真的很接近肮脏的工作 @Chobeat 如何将 Map 列转换为元组列表并将其转换回 map? 【参考方案1】:

答案在错误响应中。您需要将 my_map 变成可排序的数据类型! :)

【讨论】:

以上是关于group by 子句中的 sparkSQL Map 列的主要内容,如果未能解决你的问题,请参考以下文章

GROUP BY 子句在 IBM dashDB 中神秘地失败

我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?

only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"

ORDER BY 子句中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中

Android 中的 GROUP BY 子句(ICS 及以上)

Django 查询中的额外 GROUP BY 子句