pyspark 日常整理
1 联表
df1.join(df2,连接条件,连接方式)
如:df1.join(df2,[df1.a==df2.a], "inner").show()
连接方式:字符串类型, 如 "left" , 常用的有:inner, cross, outer, full, full_outer, left, left_outer, right, right_outer
连接条件: df1["a"] == df2["a"] 或 "a" 或 df1.a == df2.a , 如有多个条件的情况 如,[df1["a"] == df2["a"] ,df1["b"] == df2["b"] ] 或 (df.a > 1) & (df.b > 1)
需要注意的:
如果使用 "a" 进行连接,则会自动合并相同字段,只输入一个。如 df1.join(df2,"a","left") 只输出df1的 a字段,df2 的 a 字段是去掉了。
2 udf使用
需添加引用
from pyspark.sql.functions import udf
from pyspark.sql import functions as F
有两种方式:
第一种
def get_tablename(a):
return "name"
get_tablename_udf = F.udf(get_tablename)
第二种
@udf
def get_tablename_udf (a):
return "name"
两种方式的调用是一样的
df.withColumn("tablename", get_tablename_udf (df[a"]))
3 分组
使用groupBy方法
单个字段:df.groupBy("a") 或 df.groupBy(df.a)
多个字段:df.groupBy([df.a, df.b]) 或 df.groupBy(["a", "b"])
需要注意的:
groupBy方法后面 一定要跟字段输出方法,如:agg()、select()等
4 查询条件
使用 filter() 或 where() ,两者一样的。
单条件: df.filter(df.a > 1) 或 df.filter("a > 1")
多条件:df.filter("a > 1 and b > 0 ") 或 df.filter((df.a > 1) & (df.b ==0))
5 替换null值
使用 fillna() 或 fill()方法
df.fillna({"a":0, "b":""})
df.na.fill({"a":0, "b":""})
6 排序
使用 orderBy() 或 sort()方法
df.orderBy(df.a.desc())
df.orderBy(desc("age"), asc("name"))
df.orderBy(["age", "name"], ascending=[0, 1])
df.orderBy(["age", "name"], ascending=False)
需要注意的:
ascending 默认为True 升序, False 降序
7 新增列
使用 withColumn() 或 alias()方法
df.withColumn("b",F.lit(999))
df.withColumn("b",df.a)
df.withColumn("b",df.a).withColumn("m","m1")
df.agg(F.lit(ggg).alias("b"))
df.select(F.lit(ggg).alias("b"))
需要注意的:
withColumn方法会覆盖df里面原有的同名的列
8 重命名列名
使用 withColumnRenamed() 方法
df.withColumnRenamed("a","a1").withColumnRenamed("m","m1")
需要注意的点:
确定要重命名的列在df里面存在
9 创建新的DataFrame
使用createDataFrame()方法
spark.createDataFrame(数据集, 列集合) 例如:spark.createDataFrame([(5, "hello")], ['a', 'b'])
需要注意的:
数据集和列集合 个数要一致
spark为 SparkSession 对象, 例如:spark = SparkSession.builder.master("local").appName("Word Count").config("spark.some.config.option", "some-value").getOrCreate()
10 并集
使用union() 或 unionAll() 方法
df.union(df1)
需要注意的:
这两个方法都不会主动消除重复项的,如需要,在后面跟distinct() 如:df.union(df1).distinct()
这两个方法都是按照数据列的摆放顺序进行合并,而不是根据列名
两个结果集的列 数量要保证一样大小
11 交集
使用 intersect()方法
df1.select("a").intersect(df2.select("a"))
返回 df1和df2 中 相同的a 字段
12 差集
使用 subtract()方法
df1.select("a").subtract(df2.select("a"))
返回 df1 有,而df2 没有的 a 字段值。
需要注意的:
取的是df1的数据
13 判断是否NULL值
使用isNull()方法 或 sql语句
df.where(df["a"].isNull())
df.where("a is null")
14 在计算条件中加入判断
使用when() 方法
df.select(when(df.age == 2, 1).alias("age"))
age列的值:当满足when条件,则输出1 ,否则,输出NULL
多个条件 :when((df.age == 2) & (df.name == '"name") , 1)
pyspark 日常整理的更多相关文章
- JavaScript中常用的正则表达式日常整理(全)
//校验是否全由数字组成 ? 1 2 3 4 5 6 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) retu ...
- IDEA快捷键 日常整理
F9 : debug Ctrl+” +/- ” : 当前方法展开.折叠 Ctrl+Shift+”+/-” : 全部展开.折叠 Alt+1 : 工程面板 Alt+4:控制台 Alt+7:查看本类方法 S ...
- js/jq基础(日常整理记录)-4-一个简单的自定义tree插件
一.一个简单的自定义tree插件 上一篇是之前自定义的table插件,这一篇也是之前同期尝试做的一个tree插件. 话不多说,先看看长什么样子哈! 现在来看确实不好看,以后在优化吧! 数据源:ajax ...
- js/jq基础(日常整理记录)-3-一个自定义表格
一.一个自定义的表格 这个js是我刚工作的时候,我们老大让我做一个功能,我觉得html自带的table功能单一,没有分页和排序功能,所有就尝试着做一下,所以这个东西就出来了.很久没写博客了,贴出来吧, ...
- js/jq基础(日常整理记录)-2-一个简单的js方法实现集合的非引用拷贝
一.一个简单的js方法实现集合拷贝 做web项目的时候,少不了和js中的数组,集合等对象接触,那么你肯定会发现,在js中存在一个怪异的现象就是数组和集合的拷贝都是地址复制,并不是简单的数据的拷贝. 举 ...
- js/jq基础(日常整理记录)-1-纯js格式化时间
一.纯js格式化时间 之前记录了一些,工作中发现的比较常用的使用,就记录一下. 由于很基础,就直接贴出来了,不做分析了. 改造一下Date的原型 Date.prototype.format = fun ...
- python面试大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- oracle常用命令【转载】
oracle常用命令 一.Oracle数据库实例.用户.目录及session会话查看: 1.ORACLE SID查看设置 查看SID.用户名 $ env|grep SID .select * from ...
随机推荐
- Gtksharp编译时提示下载gtk文件问题
Gtksharp编译时提示下载gtk文件问题 1.昨天晚上新建gtksharp项目之后,安装gtksharp之后,编译时无法成功,提示无法下载gtk-3.24.zip 2.记得前几天,另一个项目可以生 ...
- 分享windows 10 下部署 elasticsearch 和 logstash (二)
接上一篇,es部署很简单,很快就弄好了. 但是还是有很多不玩美. 比如说:主机是本地的IP或机器名,端口是固定的9200. 而且是只有一个节点,我要在一台机器上部署多个节点呢. 经过一段时间的摸索,做 ...
- python 处理中文遇到的编码问题总结 以及 字符str的编码如何判断
如何处理中午编码的问题 Python的UnicodeDecodeError: 'utf8' codec can't decode byte 0xxx in position 这个错误是因为你代码中的某 ...
- Python【day 11】闭包
闭包 1.闭包的概念: 嵌套函数中,父级函数的变量,在子集函数中用到了(访问.修改.返回),那么这个变量就被保护起来了 只有自己可以修改,父级函数()()就是闭包函数 2.闭包的特点: 1.常驻内存 ...
- 原生JavaScript HTML DOM Style 对象参考
Style 对象属性 可以在Style对象上使用以下属性: “CSS”列指示定义属性的CSS版本(CSS1,CSS2或CSS3). 属性 描述 CSS alignContent 当项目不使用所有可用空 ...
- JPA笔记1 ManyToOne
persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence ver ...
- mac os catalina mongodb最新安装流程
1.brew安装 不推荐用brew,因为现在mongodb闭源了,brew里已经搜索不到mongodb,不过还是可以用brew安装的,这篇就不写了. 2.官网下载 直接去官网下载一个zip,解压完放到 ...
- authenticating with the app store 一直卡住--问题记录
参考链接:https://blog.csdn.net/csdn2314/article/details/90021367 authenticating with the app store 一直卡住最 ...
- 【学习笔记】兄弟连LINUX视屏教程(沈超 李明)
发现自己的linux水平楞个瓜皮,找个视屏教程学习一哈 1 linux系统简介 1.1 UNIX和Linux发展史 unix发展历史:1969年,美国贝尔实验室的肯.汤普森开发出unix系统,1971 ...
- lf 前后端分离 (5) 优惠券
关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...