gpt4 book ai didi

apache-spark - 如何从 DataFrame apache spark 中找到最大值 Alphabet?

转载 作者:行者123 更新时间:2023-12-04 17:54:21 25 4
gpt4 key购买 nike

我正在尝试从整个 Pandas 数据框中获取最大值 Alphabet。我对它来自哪一行或哪一列不感兴趣。我只对数据框中的单个最大值感兴趣。

这是它的样子:

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);

Exception: "conditionName" is not a numeric column. Aggregation function can only be applied on a numeric column.;

我需要整个数据框字母字符中的最大值。我应该使用什么,才能达到预期的效果?

提前致谢!

最佳答案

您可以按字符串列对 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)
")

关于apache-spark - 如何从 DataFrame apache spark 中找到最大值 Alphabet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41716539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com