我有一个看起来像这样的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。 任何线索都赞赏。
答案 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|
+----------+