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实现输入数字的连续加减方法
Jun 22 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
python绘制直方图和密度图的实例
Jul 08 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
Jupyter Notebook折叠输出的内容实例
Apr 22 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
python中round函数如何使用
Jun 19 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 Python
OpenCV读取与写入图片的实现
Oct 13 Python
解决Pyinstaller打包软件失败的一个坑
Mar 04 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
用PHP调用数据库的存贮过程!
2006/10/09 PHP
浅谈php和.net的区别
2014/09/28 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
简明 Python 基础学习教程
2007/02/08 Python
python轻松实现代码编码格式转换
2015/03/26 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
使用Python封装excel操作指南
2021/01/29 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
如何转换一个字符串到enum值
2014/04/12 面试题
某集团股份有限公司委托书样本
2014/09/24 职场文书
2014年城管工作总结
2014/11/20 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
交通事故被告代理词
2015/05/23 职场文书
战友聚会致辞
2015/07/28 职场文书