【发布时间】:2020-11-21 14:21:54
【问题描述】:
我试图在 Spark SQL 中运行一个简单的查询,但除非我使用 first(),否则它会抛出错误
此查询在 MySQL 中正常工作
SELECT film.title,count(rental.rental_id) as total_rentals, film.rental_rate, count(rental.rental_id) * film.rental_rate as revenue
FROM rental
INNER JOIN inventory ON rental.inventory_id = inventory.inventory_id
INNER JOIN film ON inventory.film_id = film.film_id
GROUP BY film.title
ORDER BY 1
但 Spark SQL 不一样 我得到的错误是:
Exception in thread "main" org.apache.spark.sql.AnalysisException: expression 'film.`rental_rate`' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;;
这样做实际上可以解决问题
SELECT film.title,count(rental.rental_id) as total_rentals, first(film.rental_rate), count(rental.rental_id) * first(film.rental_rate) as revenue
FROM rental
INNER JOIN inventory ON rental.inventory_id = inventory.inventory_id
INNER JOIN film ON inventory.film_id = film.film_id
GROUP BY film.title
ORDER BY 1
有人能解释一下为什么需要 Spark SQL 吗?
【问题讨论】:
标签: mysql sql group-by apache-spark-sql