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新手实现2048小游戏
Mar 31 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
python模块常用用法实例详解
Oct 17 Python
Python装饰器用法与知识点小结
Mar 09 Python
pycharm安装及如何导入numpy
Apr 03 Python
详解python polyscope库的安装和例程
Nov 13 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 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
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
PHP获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php在线代理转向代码
2012/05/05 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
python分析nignx访问日志脚本分享
2015/02/26 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
Python实现的特征提取操作示例
2018/12/03 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
党员违纪检讨书
2014/02/18 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
餐馆开业致辞
2015/08/01 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python
python前后端自定义分页器
2022/04/13 Python