2016-03-15 2 views
2

В Spark SQL можно ли присвоить псевдоним группируемому полю?Назначить псевдоним групповому полю в Spark SQL

Так, например, я хочу сделать что-то вроде этого:

SELECT field_b 
FROM table 
GROUP BY some_func(field_a) AS field_b 

, который не поддерживается, вместо этого я должен сделать:

SELECT some_func(field_a) AS field_b 
FROM table 
GROUP BY some_func(field_a) 

Как вы можете видеть, что я должен позвонить some_func дважды, что раздражает.

ответ

1

Если вы используете какую-либо функцию агрегации вы можете использовать подзапрос:

SELECT field_b, SOME_AGG(field_c) FROM (
    SELECT *, SOME_FUNC(field_a) field_b FROM table 
) tmp GROUP BY field_b 

или DSL:

table.groupBy(some_func($"field_a").alias("field_b")) 
    .agg(some_agg($"field_c")) 

Если вы не используете агрегирование distinct положение будет иметь тот же эффект:

SELECT DISTINCT some_func(field_a) field_b FROM table 

с эквивалентом DSL:

table.select(some_func($"field_a").alias("field_b")).distinct 
+1

Итак, во втором вопросе моего вопроса, действительно ли искра называет 'some_func' дважды для каждой строки? И подходит ли подзапрос, чем мой второй запрос? – elgoog

Смежные вопросы