在Spark SQL中为组字段分配别名

时间:2016-03-15 22:39:39

标签: apache-spark apache-spark-sql

在Spark SQL中,是否可以为分组字段分配别名?

所以,例如,我想做这样的事情:

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

不支持,而是我必须这样做:

some_func

如您所见,我需要两次致电def func_1(a, b=1, c=None): code here ,这有点烦人。

1 个答案:

答案 0 :(得分: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