gpt4 book ai didi

apache-spark - 如何从pyspark的数据框列中获取第一个值和最后一个值?

转载 作者:行者123 更新时间:2023-12-04 01:43:31 25 4
gpt4 key购买 nike

我有数据帧,我想从数据帧列中获取第一个值和最后一个值。

+----+-----+--------------------+
|test|count| support|
+----+-----+--------------------+
| A| 5| 0.23809523809523808|
| B| 5| 0.23809523809523808|
| C| 4| 0.19047619047619047|
| G| 2| 0.09523809523809523|
| K| 2| 0.09523809523809523|
| D| 1|0.047619047619047616|
+----+-----+--------------------+

期望输出首先来自支持列,最后一个值即 x=[0.23809523809523808,0.047619047619047616.]

最佳答案

您可以使用 collect但是性能会很糟糕,因为驱动程序将收集所有数据,只是为了保留第一个和最后一个项目。更糟糕的是,如果你有一个大数据帧,它很可能会导致 OOM 错误,因此根本不起作用。

另一个想法是使用 aggfirstlast聚合函数。这不起作用! (因为reducers不一定按照dataframe的顺序获取记录)

Spark 提供 head函数,这使得获取第一个元素非常容易。但是,spark 不提供任何 last功能。一种直接的方法是将数据帧向后排序并使用 head再次发挥作用。

first=df.head().support
import pyspark.sql.functions as F
last=df.orderBy(F.monotonically_increasing_id().desc()).head().support

最后,由于仅仅为了获取第一个和最后一个元素而对数据帧进行排序是一种耻辱,我们可以使用 RDD API 和 zipWithIndex索引数据框并只保留第一个和最后一个元素。

size = df.count()
df.rdd.zipWithIndex()\
.filter(lambda x : x[1] == 0 or x[1] == size-1)\
.map(lambda x : x[0].support)\
.collect()

关于apache-spark - 如何从pyspark的数据框列中获取第一个值和最后一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56442215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com