SparkSQL:在 GROUP BY 中使用自定义列
SparkSQL: Use custom column in GROUP BY
我正在使用 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
或在group by子句中重复公式
SELECT (col1 + col1/10) as col1 , sum(col2), sum(col3), sum(col4)
FROM table
GROUP BY (col1 + col1 / 10), col2
请注意,第一个选项需要计算列的明确别名。
我正在使用 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
或在group by子句中重复公式
SELECT (col1 + col1/10) as col1 , sum(col2), sum(col3), sum(col4)
FROM table
GROUP BY (col1 + col1 / 10), col2
请注意,第一个选项需要计算列的明确别名。