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 相关文章推荐
Python3处理文件中每个词的方法
May 22 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
Tensorflow之Saver的用法详解
Apr 23 Python
Python 堆叠柱状图绘制方法
Jul 29 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
django 模版关闭转义方式
May 14 Python
Softmax函数原理及Python实现过程解析
May 22 Python
怎么快速自学python
Jun 22 Python
Python Pygame实现俄罗斯方块
Feb 19 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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 中英文语言转换类代码
2011/08/11 PHP
php从字符串创建函数的方法
2015/03/16 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Python实现ping指定IP的示例
2018/06/04 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
python中的时区问题
2021/01/14 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
庆七一活动方案
2014/01/25 职场文书
机关节能减排实施方案
2014/03/17 职场文书
学校文明单位申报材料
2014/05/06 职场文书
2014年母亲节寄语
2014/05/07 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
学期个人自我总结
2015/02/13 职场文书
致青春观后感
2015/06/09 职场文书
歼十出击观后感
2015/06/11 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
高三生物教学反思
2016/02/22 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server