pyspark:SQL count()失败

时间:2018-02-19 15:27:44

标签: pyspark apache-spark-sql pyspark-sql

我有一个看起来像这样的Spark数据框

x  |count
1  |3
3  |5
4  |3

以下是我的火花代码:

sdf.createOrReplaceTempView('sdf_view')
spark.sql('SELECT MAX(count), x FROM sdf_view')

这看起来像一个完美的SQL查询,我想知道为什么这不适用于Spark。我想要找到的是最大计数以及与之对应的x。 任何线索都赞赏。

1 个答案:

答案 0 :(得分:0)

错误消息是:

AnalysisException: u"grouping expressions sequence is empty, and 'sdf_view.`x`' is not an aggregate function. Wrap '(max(sdf_view.`count`) AS `max(count)`)' in windowing function(s) or wrap 'sdf_view.`x`' in first() (or first_value) if you don't care which value you get.

我又添了一行:

x = [{"x": 1, "count": 3}, {"x": 3, "count": 5}, {"x": 4, "count": 3}, {"x": 4, "count": 60}]
sdf = spark.createDataFrame(x)

+-----+---+
|count|  x|
+-----+---+
|    3|  1|
|    5|  3|
|    3|  4|
|   60|  4|
+-----+---+

你的SQL语句很奇怪,你需要说出你想要如何分组。我猜你想要分组X并获得每个独特X的最大值?换句话说,您是否想要每个唯一X的最大计数?

y = spark.sql('SELECT MAX(count), x FROM sdf_view GROUP BY x ')
y.show()

+----------+---+
|max(count)|  x|
+----------+---+
|         3|  1|
|         5|  3|
|        60|  4|
+----------+---+

或者你想找到最高数量的人吗?

y = spark.sql('SELECT MAX(count) FROM sdf_view')
y.show()

+----------+
|max(count)|
+----------+
|        60|
+----------+