>我正在尝试从整个熊猫数据帧中获取最大值字母表。我对它来自哪一行或哪一列不感兴趣。我只对数据框中的单个最大值感兴趣。
这是它的样子:
id conditionName
1 C
2 b
3 A
4 A
5 A
预期结果是:
|id|conditionName|
+--+-------------+
| 3| A |
| 4| A |
| 5| A |
+----------------+
因为"A"是字母表的第一个字母
df= df.withColumn("conditionName", col("conditionName").cast("String")) .groupBy("id,conditionName").max("conditionName"); df.show(false);
例外:"条件名称"不是数字列。聚合函数只能应用于数字列。
我需要整个数据帧字母字符的最大值。我应该使用什么,才能获得预期的结果?
感谢提前!
您可以
按字符串列对DataFrame
进行排序,获取第一个值并使用它来过滤原始数据:
from pyspark.sql.functions import lower, desc, first
# we need lower() because ordering strings is case sensitive
first_letter = df.orderBy((lower(df["condition"])))
.groupBy()
.agg(first("condition").alias("condition"))
.collect()[0][0]
df.filter(df["condition"] == first_letter).show()
#+---+---------+
#| id|condition|
#+---+---------+
#| 3| A|
#| 4| A|
#| 5| A|
#+---+---------+
或者更优雅地使用 Spark SQL
:
df.registerTempTable("table")
sqlContext.sql("SELECT *
FROM table
WHERE lower(condition) = (SELECT min(lower(condition))
FROM table)
")