如何从数据帧中找到最大值字母表阿帕奇火花



>我正在尝试从整个熊猫数据帧中获取最大值字母表。我对它来自哪一行或哪一列不感兴趣。我只对数据框中的单个最大值感兴趣。

这是它的样子:

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

相关内容

  • 没有找到相关文章

最新更新