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编写电话薄实现增删改查功能
May 07 Python
最大K个数问题的Python版解法总结
Jun 16 Python
基于Python的接口测试框架实例
Nov 04 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
python的time模块和datetime模块实例解析
Nov 29 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
Python Tornado核心及相关原理详解
Jun 24 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 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
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
Python实现类继承实例
2014/07/04 Python
python MySQLdb使用教程详解
2018/03/20 Python
python如何爬取网页中的文字
2020/07/28 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
中药学自荐信
2014/06/15 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
理想国读书笔记
2015/06/25 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
python基础学习之递归函数知识总结
2021/05/26 Python
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫