pyspark返回每个分组某个值最大的行

  统计/机器学习 Python sql    浏览次数:1669        分享
0

我现在一个hive表里有type,value,id等等好几列,我想返回type每个分组里value最大的行。

不能用groupby max,因为这样只能返回每个分组的最大值,而不是完整的行。我用pyspark应该怎么做呢?

 

ziyu   2020-04-15 23:39



   1个回答 
3

这种用reducebykey就可以了

from pyspark.sql import functions as F
from pyspark.sql.window import Window
df = sql_context.createDataFrame([
("A", "ARON", 1),
("A", "BILL", 2),
("A", "CLAIR", 3),
("B", "DANIEL", 1),
("B", "ERIC", 4),
("B", "FRANK", 2),
], ["id", "name", "weight"])

def max_row(row1,row2):
    if row1['weight'] > row2['weight']:
       return row1
    else:
        return row2


df_rdd = df.rdd.map(lambda row: (row['id'], row)).\
reduceByKey(lambda row1,row2: max_row(row1,row2)).map(lambda row: row[1])
sql_context.createDataFrame(df_rdd).show()


或者用分组排序后取第一个


windows_spec = Window.partitionBy("id").orderBy(F.col("weight").desc())
max_df = df.withColumn("rank", F.rank().over(windows_spec)).filter("rank =1")
max_df.show()

 可能第一个会快一些吧,一般也都是用第一个

SofaSofa数据科学社区DS面试题库 DS面经

wwb_306   2020-04-16 18:36

谢谢 - ziyu   2020-04-17 09:17


  相关主题

spark sql里怎么用case when?   1回答

如何对pyspark dataframe删除一列   3回答

spark里怎么refresh表?   3回答

pyspark里如何进行SELECT DISTINCT操作?   1回答

pyspark里unpersist()什么作用?   1回答

pyspark中怎么对dataframe里的行按照列去重?   1回答

pyspark里怎么求百分位数?   1回答

返回pyspark dataframe的行数?   1回答

SparkML里线性回归底层是什么原理?   1回答

spark ml和spark mllib区别   5回答

pyspark里怎么把一列日期转成是全年的第几周?   2回答

sparkml里的word2vec是基于哪种模型的?   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!