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 正则表达式(转义问题)
Dec 15 Python
python类装饰器用法实例
Jun 04 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Django如何实现内容缓存示例详解
Sep 24 Python
python基础学习之如何对元组各个元素进行命名详解
Jul 12 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
Python类和实例的属性机制原理详解
Mar 21 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
PHP编实现程动态图像的创建代码
2008/09/28 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php搜索文件程序分享
2015/10/30 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python中用Spark模块的使用教程
2015/04/13 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
python路径的写法及目录的获取方式
2019/12/26 Python
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
初中美术教学反思
2014/01/29 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
售后求职信范文
2014/03/15 职场文书
明信片寄语大全
2014/04/08 职场文书
护士求职信范文
2014/05/24 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书