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 子句中