作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有数据帧,我想从数据帧列中获取第一个值和最后一个值。
+----+-----+--------------------+
|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 错误,因此根本不起作用。
另一个想法是使用 agg
与 first
和 last
聚合函数。这不起作用! (因为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
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/
我是一名优秀的程序员,十分优秀!