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 各种删除文件失败的处理方式分享
Apr 24 Python
Python实现修改IE注册表功能示例
May 10 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python3多线程版TCP端口扫描器
Aug 31 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
基于opencv实现简单画板功能
Aug 02 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
python 如何对logging日志封装
Dec 02 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 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
PHP怎样调用MSSQL的存储过程
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
php中的一个中文字符串截取函数
2007/02/14 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
python3中int(整型)的使用教程
2017/03/23 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
英语专业毕业生自荐信范文
2013/12/31 职场文书
会计助理岗位职责
2014/02/17 职场文书
2014年仓库工作总结
2014/11/20 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
vue选项卡切换的实现案例
2022/04/11 Vue.js
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL