Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何从DataFrame apache spark中查找最大值字母表?_Apache Spark_Pyspark_Spark Dataframe_Bigdata - Fatal编程技术网

Apache spark 如何从DataFrame apache spark中查找最大值字母表?

Apache spark 如何从DataFrame apache spark中查找最大值字母表?,apache-spark,pyspark,spark-dataframe,bigdata,Apache Spark,Pyspark,Spark Dataframe,Bigdata,我正试图从熊猫数据帧整体上获取最大值字母表。我对它来自哪一行或哪一列不感兴趣。我只对数据帧中的单个最大值感兴趣 这就是它看起来的样子: id conditionName 1 C 2 b 3 A 4 A 5 A 预期结果是: |id|conditionName| +--+-------------+ | 3| A | | 4| A | | 5| A | +----------------+ 因为

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

这就是它看起来的样子:

id conditionName
1     C
2     b
3     A
4     A
5     A
预期结果是:

|id|conditionName|
+--+-------------+
| 3|   A         |
| 4|   A         |
| 5|   A         |
+----------------+
因为“A”是字母表的第一个字母

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

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


提前谢谢

您可以按字符串列对数据框进行排序,获取第一个值并使用它过滤原始数据:

从pyspark.sql.functions导入lower,desc,first
#我们需要lower(),因为排序字符串区分大小写
第一个字母=df.orderBy((较低(df[“条件]))\
.groupBy()\
.agg(第一个(“条件”)。别名(“条件”))\
.collect()[0][0]
filter(df[“条件”]==第一个字母).show()
#+---+---------+
#|id |条件|
#+---+---------+
#|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)
               ")

预期产量是多少?您对“字母表中的最大值”的定义是什么?对不起,我将编辑它,谢谢您的提醒!还不清楚为什么,是因为A是字母表的第一个字母,还是因为它的计数最高?因为A是字母表的第一个字母:)
df.registerTempTable("table")
sqlContext.sql("SELECT * 
                FROM table 
                WHERE lower(condition) = (SELECT min(lower(condition)) 
                                          FROM table)
               ")