Hadoop 配置单元-阵列中记录的相同序列

Hadoop 配置单元-阵列中记录的相同序列,hadoop,hive,Hadoop,Hive,我有一个小时级别的数据表。我想找到数组中所有小时的小时数以及col1和col2的值。输入表 +-----+-----+-----+ | hour| col1| col2| +-----+-----+-----+ | 00 | 0.0 | a | | 04 | 0.1 | b | | 08 | 0.2 | c | | 12 | 0.0 | d | +-----+-----+-----+ 我使用下面的查询来获取数组中的列值 查询: 选择计数(hr)、映射值(str_-to_

我有一个小时级别的数据表。我想找到数组中所有小时的小时数以及col1和col2的值。输入表

+-----+-----+-----+
| hour| col1| col2|
+-----+-----+-----+
| 00  | 0.0 | a   |
| 04  | 0.1 | b   |
| 08  | 0.2 | c   |
| 12  | 0.0 | d   |
+-----+-----+-----+
我使用下面的查询来获取数组中的列值

查询: 选择计数(hr)、映射值(str_-to_-map)(concat_-ws(',')、收集集(concat_-ws(':')、反射('java.util.UUID'、'randomUUID')、转换(col1作为字符串‘‘‘‘‘)’)作为col1_-arr、映射值(str_-to_-map(concat_-ws(',')、收集集(concat_-ws(':')、反射('java.util.UUID'、'randomuid')、随机化UUID')、转换(col2作为字符串‘‘‘‘‘‘‘‘‘)’))))))’)作为col2(从colu-arr表中

我正在获取的输出,col2_arr中的值与col1_arr中的值不在同一序列中。请建议如何获取同一序列中不同列的数组/列表中的值

+----------+-----------------+----------+
| count(hr)| col1_arr        | col2_arr | 
+----------+-----------------+----------+
| 4        | 0.0,0.1,0.2,0.0 | b,a,c,d  | 
+----------+----------------+-----------+

Required output:

+----------+-----------------+----------+
| count(hr)| col1_arr        | col2_arr | 
+----------+-----------------+----------+
| 4        | 0.0,0.1,0.2,0.0 | a,b,c,d  | 
+----------+----------------+-----------+
谢谢




我正在使用Hive 0.10,此版本中没有collect_列表。(1)您的意思是按小时订购?(2) 小时是独一无二的吗?(3) 如果你错过了一个小时怎么办?请参考上面的详细信息。我已经添加了我在我的表上尝试过的查询。(1)-不,这与小时顺序无关,我需要的是col2列表将按照与col1列表相同的顺序(各自的值)(2)col1值将是唯一的,但col2值不是唯一的,这就是为什么我不能在这里使用collect_set,因为我们还需要重复的值。(3) 如果少了一个小时并不重要,我们只需要计算一下小时数。谢谢!使用Hive 0.10为meI am工作,此版本中不提供collect_列表。(1)您的意思是按小时订购?(2) 小时是独一无二的吗?(3) 如果你错过了一个小时怎么办?请参考上面的详细信息。我已经添加了我在我的表上尝试过的查询。(1)-不,这与小时顺序无关,我需要的是col2列表将按照与col1列表相同的顺序(各自的值)(2)col1值将是唯一的,但col2值不是唯一的,这就是为什么我不能在这里使用collect_set,因为我们还需要重复的值。(3) 如果少了一个小时并不重要,我们只需要计算一下小时数。谢谢!为我工作
select  count(*) as cnt 
       ,concat_ws(',',sort_array(collect_list(hour)))  as hour
       ,regexp_replace(concat_ws(',',sort_array(collect_list(concat_ws(':',hour,cast(col1 as string))))),'..:','') as col1
       ,regexp_replace(concat_ws(',',sort_array(collect_list(concat_ws(':',hour,col2)))),'..:','') as col2

from    mytable
;
+-----+-------------+-------------+---------+
| cnt |    hour     |    col1     |  col2   |
+-----+-------------+-------------+---------+
|   4 | 00,04,08,12 | 0,0.1,0.2,0 | a,b,c,d |
+-----+-------------+-------------+---------+