我正在使用Spark 1.3.0。在我的应用程序中,我创建了一个具有以下columns (col1, col2, col3,col4)
我必须在数据框中派生一个自定义列(一个新列)。所以我的SQL查询看起来像
SELECT (col1 + col1/10) as col1 , col2, col3 , col4 FROM table GROUP BY col1 , col2
我的要求是按新的自定义列而不是旧的 col1 分组。但是上面的查询无法正常工作。它仍然按旧 col1 分组。我知道我为新的自定义列指定了与旧列名称相同的名称。即使尝试为自定义列指定新名称,例如:
SELECT (col1 + col1/10) as new_col1 , col2, col3 , col4 FROM table GROUP BY new_col1 , col2
它失败并显示以下错误:
org.apache.spark.sql.AnalysisException: cannot resolve 'new_col1' given input columns..
任何建议如何实现这一目标?谢谢
假设剩余部分是有效的聚合,您可以使用子查询:
SELECT new_col1 AS col1, sum(col2), sum(col3), sum(col4)
FROM (
SELECT *, col1 + col1 / 10 AS new_col1 FROM table
) AS tmp GROUP BY new_col1, col2
或在分组依据子句中重复公式。
SELECT (col1 + col1/10) as col1 , sum(col2), sum(col3), sum(col4)
FROM table
GROUP BY (col1 + col1 / 10), col2
请注意,第一个选项需要计算列的明确别名。