首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >显示组和agg之后的所有火花放电列

显示组和agg之后的所有火花放电列
EN

Stack Overflow用户
提问于 2020-01-19 05:58:39
回答 1查看 118关注 0票数 0

我希望按一列分组,然后找到另一列的最大值。最后,显示基于此条件的所有列。然而,当我使用我的代码时,它只显示2列,而不是所有列。

代码语言:javascript
运行
复制
# Normal way of creating dataframe in pyspark
sdataframe_temp = spark.createDataFrame([
    (2,2,'0-2'),
    (2,23,'22-24')],
    ['a', 'b', 'c']
)

sdataframe_temp2 = spark.createDataFrame([
    (4,6,'4-6'),
    (5,7,'6-8')],
    ['a', 'b', 'c']
)
# Concat two different pyspark dataframe
sdataframe_union_1_2 = sdataframe_temp.union(sdataframe_temp2)

sdataframe_union_1_2_g = sdataframe_union_1_2.groupby('a').agg({'b':'max'})

sdataframe_union_1_2_g.show()

产出:

代码语言:javascript
运行
复制
+---+------+
|  a|max(b)|
+---+------+
|  5|     7|
|  2|    23|
|  4|     6|
+---+------+

预期产出:

代码语言:javascript
运行
复制
+---+------+-----+
|  a|max(b)| c   |
+---+------+-----+
|  5|     7|6-8  |
|  2|    23|22-24|
|  4|     6|4-6  |
+---+------+---+
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-19 06:28:26

您可以使用Window function使其工作:

方法1:使用窗口函数

代码语言:javascript
运行
复制
import pyspark.sql.functions as F
from pyspark.sql.window import Window

w = Window().partitionBy("a").orderBy(F.desc("b"))

(sdataframe_union_1_2
.withColumn('max_val', F.row_number().over(w) == 1)
.where("max_val == True")
.drop("max_val")
.show())

+---+---+-----+
|  a|  b|    c|
+---+---+-----+
|  5|  7|  6-8|
|  2| 23|22-24|
|  4|  6|  4-6|
+---+---+-----+

解释

当我们想将一个新列附加到现有的列集时,

  1. Window函数非常有用。在本例中,
  2. 告诉Window函数按partitionBy('a')列分组,并按F.desc(b)降序对列b进行排序。这使得每个组中b中的第一个值成为它的最大值。
  3. 然后我们使用F.row_number()过滤行号等于1的最大值。
  4. 最后,我们删除新列,因为它在过滤数据帧之后没有使用。

方法2:使用groupby +内部连接

代码语言:javascript
运行
复制
f = sdataframe_union_1_2.groupby('a').agg(F.max('b').alias('b'))

sdataframe_union_1_2.join(f, on=['a','b'], how='inner').show()

+---+---+-----+
|  a|  b|    c|
+---+---+-----+
|  2| 23|22-24|
|  5|  7|  6-8|
|  4|  6|  4-6|
+---+---+-----+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59807555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档