pyspark给dataframe增加新的一列的实现示例


Posted in Python onApril 24, 2020

熟悉pandas的pythoner 应该知道给dataframe增加一列很容易,直接以字典形式指定就好了,pyspark中就不同了,摸索了一下,可以使用如下方式增加

from pyspark import SparkContext
from pyspark import SparkConf
from pypsark.sql import SparkSession
from pyspark.sql import functions

spark = SparkSession.builder.config(conf=SparkConf()).getOrCreate()

data =   [['Alice', 19, 'blue', '["Alice", 19, "blue"]'],
  ['Jane', 20, 'green', '["Jane", 20, "green"]'],
   ['Mary', 21, 'blue', '["Mary", 21, "blue"]'], ]
frame = spark.createDataFrame(data, schema=["name", "age", "eye_color", "detail"])

frame.cache()
frame.show()

+-----+---+---------+--------------------+
| name|age|eye_color|              detail|
+-----+---+---------+--------------------+
|Alice| 19|     blue|["Alice", 19, "bl...|
| Jane| 20|    green|["Jane", 20, "gre...|
| Mary| 21|     blue|["Mary", 21, "blue"]|
+-----+---+---------+--------------------+

1、 增加常数项

frame2 = frame.withColumn("contant", functions.lit(10))
frame2.show()

+-----+---+---------+--------------------+-------+
| name|age|eye_color|              detail|contant|
+-----+---+---------+--------------------+-------+
|Alice| 19|     blue|["Alice", 19, "bl...|     10|
| Jane| 20|    green|["Jane", 20, "gre...|     10|
| Mary| 21|     blue|["Mary", 21, "blue"]|     10|
+-----+---+---------+--------------------+-------+

2、简单根据某列进行计算

2.1 使用 withColumn

frame3_1 = frame.withColumn("name_length", functions.length(frame.name))
frame3_1.show()

+-----+---+---------+--------------------+-----------+
| name|age|eye_color|              detail|name_length|
+-----+---+---------+--------------------+-----------+
|Alice| 19|     blue|["Alice", 19, "bl...|          5|
| Jane| 20|    green|["Jane", 20, "gre...|          4|
| Mary| 21|     blue|["Mary", 21, "blue"]|          4|
+-----+---+---------+--------------------+-----------+

2.2 使用 select

frame3_2 = frame.select(["name", functions.length(frame.name).alias("name_length")])
frame3_2.show()

+-----+-----------+
| name|name_length|
+-----+-----------+
|Alice|          5|
| Jane|          4|
| Mary|          4|
+-----+-----------+

2.3 使用 selectExpr

frame3_3 = frame.selectExpr(["name", "length(name) as name_length"])
frame3_3.show()

+-----+-----------+
| name|name_length|
+-----+-----------+
|Alice|          5|
| Jane|          4|
| Mary|          4|
+-----+-----------+

3、定制化根据某列进行计算

比如我想对某列做指定操作,但是对应的函数没得咋办,造,自己造~

frame4 = frame.withColumn("detail_length", functions.UserDefinedFunction(lambda obj: len(json.loads(obj)))(frame.detail))

# or
def length_detail(obj):
 return len(json.loads(obj))
frame4 = frame.withColumn("detail_length", functions.UserDefinedFunction(length_detail)(frame.detail))
frame4.show()

+-----+---+---------+--------------------+-------------+
| name|age|eye_color|              detail|detail_length|
+-----+---+---------+--------------------+-------------+
|Alice| 19|     blue|["Alice", 19, "bl...|            3|
| Jane| 20|    green|["Jane", 20, "gre...|            3|
| Mary| 21|     blue|["Mary", 21, "blue"]|            3|
+-----+---+---------+--------------------+-------------+

到此这篇关于pyspark给dataframe增加新的一列的实现示例的文章就介绍到这了,更多相关pyspark dataframe增加列内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
仅利用30行Python代码来展示X算法
Apr 01 Python
详细探究Python中的字典容器
Apr 14 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
Python实现简单http服务器
Apr 12 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
python处理document文档保留原样式
Sep 23 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
python zip()函数的使用示例
Sep 23 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 #Python
python实现飞船大战
Apr 24 #Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 #Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 #Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 #Python
Python读入mnist二进制图像文件并显示实例
Apr 24 #Python
python实现坦克大战
Apr 24 #Python
You might like
基于文本的留言簿
2006/10/09 PHP
获取URL文件名后缀
2013/10/24 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
python检测某个变量是否有定义的方法
2015/05/20 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
一份Java笔试题
2012/02/21 面试题
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
机关财务管理制度
2014/01/17 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
小学母亲节活动方案
2014/03/14 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
大专毕业生求职信
2014/07/05 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
童年读书笔记
2015/06/26 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android