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脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
python查看微信好友是否删除自己
Dec 19 Python
使用Python操作excel文件的实例代码
Oct 15 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
Python3基于sax解析xml操作示例
May 22 Python
python批量修改ssh密码的实现
Aug 08 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 Python
python 破解加密zip文件的密码
Apr 22 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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
javascript常用的设计模式
2017/02/09 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
Python tkinter常用操作代码实例
2020/01/03 Python
python 深度学习中的4种激活函数
2020/09/18 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
HTML5的革新 结构之美
2011/06/20 HTML / CSS
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
单位法定代表人授权委托书
2014/09/20 职场文书
党的群众路线调研报告
2014/11/03 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python