pyspark中dataframe切片

想要对pyspark中dataframe实现pandas.dataframe中iloc的切片功能,发现spark中没有相关函数可以直接实现该功能,因此自己琢磨了一个方法。
首先创建一个dataframe。

dfs = spark.createDataFrame([("a", 1), ("b", 2), ("c", 3)], ["letter", "name"])

长这样子
±-----±—+
|letter|name|
±-----±—+
| a| 1|
| b| 2|
| c| 3|
±-----±—+

# 定义切片函数
def getrows(df, rownums=None):
    return df.rdd.zipWithIndex().filter(lambda x: x[1] in rownums).map(lambda x: x[0])
#取0和1行
getrows(dfs, rownums=[0,1]).collect()

结果:
[Row(letter=u’a’, name=1), Row(letter=u’b’, name=2)]

#取0和2行
getrows(dfs, rownums=[0,2]).collect()

[Row(letter=u’a’, name=1), Row(letter=u’c’, name=3)]

切片后是rdd,再转换成dataframe即可。

getrows(dfs, rownums=[0,2]).toDF().show()

±-----±—+
|letter|name|
±-----±—+
| a| 1|
| c| 3|
±-----±—+
搞定。
再提一下实现该功能主要用到的函数zipWithIndex(),该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对,如下。

dfs.rdd.zipWithIndex().collect()

[(Row(letter=u’a’, name=1), 0),
(Row(letter=u’b’, name=2), 1),
(Row(letter=u’c’, name=3), 2)]
扫描下方二维码关注领取程序员必备千套ppt模板,300本精选好书,丰富面经:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值