2017-01-07 73 views
4

我正将一个查询从Hive迁移到SparkSQL,但运行时遇到了Map列的一个问题。sparkSQL按照分组划分的列

我的查询是

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,但是,这并没有帮助。有没有解决方法?

谢谢!

+1

由地图分组似乎是一个相当微妙的操作。你确定你真的想这样做吗? 无论如何,您可以考虑在执行此查询之前对地图进行规范化(尤其是如果您只需要几个键),否则您应该将其来回转换为可以通过sql轻松处理的另一种格式。 – Chobeat

+0

@Chobeat到目前为止,我一直在Hive中做这件事。任何想法如何我可以来回转换到另一种格式? – user100001

+1

元组列表可能是一个选项,我相信它应该可以工作。但要小心,这真的很接近肮脏的工作 – Chobeat

回答

0

答案出现在错误响应中。您需要将my_map变为可订购的数据类型! :)