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

时间:2017-01-18 10:10:12

标签: apache-spark pyspark spark-dataframe bigdata

我试图从熊猫数据框中获取最大值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);
     

异常:“conditionName”不是数字列。聚合函数只能应用于数字列。

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

感谢提前!

1 个答案:

答案 0 :(得分:0)

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