在MySQL中,我可以使用如下查询:
select
cast(from_unixtime(t.time, '%Y-%m-%d %H:00') as datetime) as timeHour
, ...
from
some_table t
group by
timeHour, ...
order by
timeHour, ...
其中,GROUP BY
中的timeHour
是SELECT表达式的结果。
但是我刚刚尝试了一个类似于Sqark SQL
中的查询,我得到了一个错误
Error: org.apache.spark.sql.AnalysisException:
cannot resolve '`timeHour`' given input columns: ...
我对Spark SQL
的查询如下:
select
cast(t.unixTime as timestamp) as timeHour
, ...
from
another_table as t
group by
timeHour, ...
order by
timeHour, ...
这种构造在Spark SQL
中可能吗?
2条答案
按热度按时间x9ybnkn61#
这种构造在Spark SQL中可能吗?
是的,是。在
GROUP BY
和ORDER BY
子句中使用新列的两种方法可以使它在Spark SQL中工作使用子查询的方法1:
方法二使用WITH//优雅方式:
Scala替代使用Spark DataFrame(Wo SQL)接口:
xdnvmnnf2#
我在这里试着给自己一个答案。
在我看来,我们必须重写查询并重复计算GROUP BY子句中的SELECT表达式。例如: