Я пытаюсь выбрать группы записей, которые содержат определенные ключевые термины, и извлечь строку в каждой группе, которая содержит максимальное время.
1 - df1:
id1 id2 name time
1 1 xxxLOAD_TIME 1
1 1 xxxLOGIN_LOGIN_SESSION_TIMExxx 2
1 1 xxxxSome other timexxxx 3
2 2 xxSome other timex 1
3 1 xxxLOAD_TIME 1
3 1 xxSome other timexx 2
2 - После создания b_flag (порядок столбцов значения не имеет) должно выглядеть следующим образом. B_flag указывает на появление LOGIN_SESSION и LOAD_TIME в группах id1 + id2:
id1 id2 name b_flag time
1 1 xxxLOAD_TIME 1 1
1 1 xxxLOGIN_LOGIN_SESSION_TIMExxx 1 2
1 1 xxxxSome other timexxxx 3
2 2 xxSome other timex 1
3 1 xxxLOAD_TIME 1 1
3 1 xxSome other timexx 2
3 - Фильтр по b_flag
id1 id2 name b_flag time
1 1 xxxLOAD_TIME 1 1
1 1 xxxLOGIN_LOGIN_SESSION_TIMExxx 1 2
1 1 xxxxSome other timexxxx 3
3 1 xxxLOAD_TIME 1 1
3 1 xxSome other timexx 2
4 - Желаемый вывод (фильтр по максимальному времени):
id1 id2 name b_flag time
1 1 xxxxSome other timexxxx 3
3 1 xxSome other timexx 2
Ниже приведен мой попытанный код:
create table num1 as
select *
from (
select t.*, sum(b_flag) over(partition by id1,id2) as sum_b_flag,
max(time) over (partition by id1,id2) max_time,
ROW_NUMBER() OVER (PARTITION BY id1,id2) as rn /*ensure no duplicates*/
from (
select
t.*,
case when name LIKE '%LOAD_TIME' or name LIKE '%LOGIN_SESSION_TIME' then 1 end b_flag
from df1 as t
) t
) t
where sum_b_flag > 0 AND name like '%TIME' AND time = max_time AND t.rn = 1
Этот код генерирует следующую ошибку, возможно, указывает на нехватку памяти:
ОШИБКА: Ошибка выполнения: ошибка во время обработки оператора: FAILED: ошибка выполнения, код возврата 2 из org. apache .had oop .hive.ql.exe c .tez.TezTask. Ошибка вершины, vertexName = Reducer 2, vertexId = vertex_1581665816621_0012_183_01, диагностика = [Задача не выполнена, taskId = task_1581665816621_0012_183_01_000006, диагностика = [TaskAttempt 0 не пройдена, информация = [ошибка: ошибка * при выполнении задачи 0166166166166166166166166166166166166166166166166_166_165_166_126_166_166_166_165_166_166_166_166_165_165_16). = 0 RuntimeException: java .lang.RuntimeException: org. apache .had oop .hive.ql.metadata.HiveException: Ошибка времени выполнения Hive при обработке строки в org. apache .had oop .hive.ql .exe c .tez.TezProcessor.initializeAndRunProcessor (TezProcessor. java: 296) в org. apache .had oop .hive.ql.exe c .tez.TezProcessor.run (TezProcessor. java: 250) в орг. apache .tez.runtime.LogicalIOProcessorRuntimeTask.run (LogicalIOProcessorRuntimeTask. java: 374) в орг. *: 73) в орг. .SU bject.doAs (Subject. java: 422) в орг. apache .had oop .security.UserGroupInformation.doAs (UserGroupInformation. java: 1730) в ......