PySpark-DataFrame条件筛选

这篇具有很好参考价值的文章主要介绍了PySpark-DataFrame条件筛选。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文是对PySpark的DataFrame中进行条件筛选操作的一个回顾总结。  

目录

示例 DataFrame 

.where 条件筛选 

.filter 过滤

.isin 过滤

funcs.when()

示例 DataFrame 

# 创建一个SparkDataFrame
rdd = sc.parallelize([("Sam", 28, 88.52, "M"),
                      ("Flora", 28, 90.55, "F"),
                      ("Run", 25, 89.55, "F"),
                      ("Peter", None, 100.0, "F"),
                      ("Mei", 23, 70.4, "F")])
test_exp_data = rdd.toDF(["name", "age", "score", "sex"])
test_exp_data.show()
+-----+----+-----+---+
| name| age|score|sex|
+-----+----+-----+---+
|  Sam|  28|88.52|  M|
|Flora|  28|90.55|  F|
|  Run|  25|89.55|  F|
|Peter|null|100.0|  F|
|  Mei|  23| 70.4|  F|
+-----+----+-----+---+

.where 条件筛选 

方式1 用df['col']去比较条件,本质上是对布尔表达式的选择。 # 多个条件中的每个条件注意用()括起来,链接注意用& 而不是and 

test_exp_data.where((test_exp_data['score'] == 100) | (test_exp_data['name']== 'Run')).show()

输出: 

+-----+----+-----+---+
| name| age|score|sex|
+-----+----+-----+---+
|  Run|  25|89.55|  F|
|Peter|null|100.0|  F|
+-----+----+-----+---+

方式2 :where(conditionExpr: String):SQL语言中where关键字后的条件
传入筛选条件表达式,可以用andor。得到DataFrame类型的返回结果,
示例:

test_exp_data.where("score = 100 or name = 'Run'").show()

输出: 

同上面方式1 一模一样

.filter 过滤

.filter过滤数据,其实作用和where一样。方式1 用df['col']去比较条件,本质上是对布尔表达式的选择。# 多个条件中的每个条件注意用()括起来,链接注意用& 而不是and 

test_exp_data.filter(test_exp_data['age']>24).show()
test_exp_data.filter((test_exp_data['age']>24) & (test_exp_data['score']>90)).show() # 多个条件中的每个条件注意用()括起来,链接注意用& 而不是and 

输出: 

+-----+---+-----+---+
| name|age|score|sex|
+-----+---+-----+---+
|  Sam| 28|88.52|  M|
|Flora| 28|90.55|  F|
|  Run| 25|89.55|  F|
+-----+---+-----+---+
+-----+---+-----+---+
| name|age|score|sex|
+-----+---+-----+---+
|Flora| 28|90.55|  F|
+-----+---+-----+---+
 
# 注意filter里面本质上是筛选bool表达式,多个条件时不能用and,如果用了会报错如” test_exp_data.filter((test_exp_data['age']>24) and (test_exp_data['score']>90)).show()“ 

报错: 提示 Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

方式2 : 里面嵌套sql 表达式的字段

test_exp_data.filter("age>24").show()
test_exp_data.filter("age>24 and score >90").show()

输出结果同上面方式1一模一样。 

对null数据进行过滤:筛选出某个字段为null的行(定义时为None,转换为dataframe可能就变成了null)。

两种方式

# 创建一个SparkDataFrame
rdd = sc.parallelize([("Sam", 28, 88.52, "M"),
                      ("Flora", 28, 90.55, "F"),
                      ("Run", 25, 89.55, "F"),
                      ("Peter", None, 100.0, "F"),
                      ("Mei", 23, 70.4, "F")])
test_exp_data = rdd.toDF(["name", "age", "score", "sex"])
test_exp_data.show()
# 方式1 
from pyspark.sql import functions as funcs
test_exp_data.filter(funcs.isnull("age")).show()
# 方式2 
test_exp_data.filter('age is null').show()

均输出: 

+-----+----+-----+---+
| name| age|score|sex|
+-----+----+-----+---+
|Peter|null|100.0|  F|
+-----+----+-----+---+

如果想保留不为null 的即为下面,注意方式1中 非需要用~ 而不是别的。这里本质上也是bool表达式

# 方式1 
from pyspark.sql import functions as funcs
test_exp_data.filter(~funcs.isnull("age")).show() #注意非需要用~ 而不是别的。这里本质上也是bool表达式
#方式2 
test_exp_data.filter("age is not null").show() # 非空的

结果均为: 

+-----+---+-----+---+
| name|age|score|sex|
+-----+---+-----+---+
|  Sam| 28|88.52|  M|
|Flora| 28|90.55|  F|
|  Run| 25|89.55|  F|
|  Mei| 23| 70.4|  F|
+-----+---+-----+---+

.isin 过滤

基于包含另一个数据框的列的内容过滤数据

test_exp_data[test_exp_data.name.isin('Sam','Run')].show()
输出: 

+----+---+-----+---+
|name|age|score|sex|
+----+---+-----+---+
| Sam| 28|88.52|  M|
| Run| 25|89.55|  F|
+----+---+-----+---+

也可以是 

test_exp_data[test_exp_data.name.isin(df2.column2)].show() 的形式; 筛选出test_exp_data中的name取值在df2中字段2的取值中出现过的 test_exp_data的各行数据,返回是一个DataFrame; 

其他实践: 

有两个数据集,从data_1中抽取出data_2中的相同的元素

可行的方式:
df_ori_part = df_ori[df_ori['user_pin'].isin(list(df_1['user_pin']))]
df_ori_part = df_ori.filter(df_ori['user_pin'].isin(list(df_1['user_pin'])) == True )

不可行:
df_ori_part = df_ori.filter(~df_ori['user_pin'].isin(list(df_1['user_pin'])) )

此处参考: PySpark︱DataFrame操作指南:增/删/改/查/合并/统计与数据处理_悟乙己的博客-CSDN博客

funcs.when()

按条件筛选 when(condition, value1).otherwise(value2)联合使用:那么:当满足条件condition的指赋值为values1,不满足条件的则赋值为values2.
otherwise表示,不满足条件的情况下,应该赋值为啥。

示例:多个when串联,对不同成绩分等级

test_exp_data.select('score',funcs.when(test_exp_data.score>90,'A').when(test_exp_data.score>80,'B').otherwise('C').alias('score_level')).show()

输出: 文章来源地址https://www.toymoban.com/news/detail-431720.html

+-----+-----------+
|score|score_level|
+-----+-----------+
|88.52|          B|
|90.55|          A|
|89.55|          B|
|100.0|          A|
| 70.4|          C|
+-----+-----------+

到了这里,关于PySpark-DataFrame条件筛选的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PySpark数据分析基础:PySpark基础功能及DataFrame操作基础语法详解

    目录 前言 一、PySpark基础功能  1.Spark SQL 和DataFrame 2.Pandas API on Spark 3.Streaming 4.MLBase/MLlib 5.Spark Core 二、PySpark依赖 Dependencies 三、DataFrame 1.创建 创建不输入schema格式的DataFrame 创建带有schema的DataFrame 从Pandas DataFrame创建 通过由元组列表组成的RDD创建 2.查看 DataFrame.show() spark.sql.

    2024年01月18日
    浏览(53)
  • pandas--DataFrame--数据切片/筛选/取值

    2024年02月13日
    浏览(53)
  • pyspark学习_dataframe常用操作_01

    1. 创建DataFrame    本文使用DataFrame通过读取json文件获取数据,代码如下:       2.  DataFrame常见操作       2.1 printSchema 2.2 show  2.3 select 2.4 groupBy  2.5 filter 2.6 sort 2.7 replace 2.8 alias 2.9 withColumn 2.10 foreach

    2024年01月25日
    浏览(48)
  • 筛选特定内容:Python中筛选DataFrame指定数据列包含特定内容的所有数据行

    筛选特定内容:Python中筛选DataFrame指定数据列包含特定内容的所有数据行 在数据处理和分析中,经常需要对数据进行筛选以便找到我们需要的信息。而在Python中,使用Pandas库中的DataFrame对象可以方便地对数据进行处理和分析。 下面我们来看如何使用contains()函数,筛选DataFr

    2024年02月14日
    浏览(37)
  • Python实用技巧:Pandas--DataFrame--筛选和删除含特定值的行与列

    Python实用技巧:Pandas–DataFrame–筛选和删除含特定值的行与列 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您的订阅和支持~ 💡 创作高质量博文,分享更多关于深度学习、PyT

    2024年04月13日
    浏览(42)
  • Hbase 查询命令 条件筛选

    Hbase 查询命令 条件筛选 方便测试 建一下表 不写namespace的话就是默认在default里 查询有哪些namespace 查看表的全量数据 放入一些测试数据 只查询一行 查询表的总记录数 按写入的时间戳查询数据 查询值为1002的记录 查询c1:id列的值为1002的 查询值包含100的记录,就跟sql的模糊匹配

    2023年04月08日
    浏览(38)
  • Pandas.DataFrame.loc[ ] 筛选数据-标签法 详解 含代码 含测试数据集 随Pandas版本持续更新

    关于Pandas版本: 本文基于 pandas2.2.0 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 传送门: Pandas API参考目录 传送门: Pandas 版本更新及新特性 传送门: Pandas 由浅入深系列教程 Pandas.DataFrame.loc[] 方法用于通过 索引、列名 筛选 DataF

    2024年01月19日
    浏览(36)
  • Python数据分析实战-dataframe筛选某字段包含(模糊匹配)某些值的记录(附源码和实现效果)

    实现功能 Python利用df[\\\'\\\'].str.contains()对dataframe筛选某字段包含(模糊匹配)某些值的记录 实现代码 实现效果  本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据挖掘相关科研工作,对数据挖掘有一定认知和理解,会结合自身科研实践经历不定期分享关于pytho

    2024年02月15日
    浏览(33)
  • vue实现多条件筛选(代码简洁)

    纯vue实现数据筛选逻辑功能,不依赖任何第三方插件、组件,复制粘贴开箱即用

    2024年02月11日
    浏览(39)
  • Java - Stream Filter 多条件筛选过滤

    Java Stream流中Filter用于通过设置的条件过滤出元素 ,示例如下: 如果需要进行多条件过滤 我们可以对这些参数进行处理,我们只是需要做一下判断,即: 让所有参数默认为 false,然后对传进来的值进行取值判断,若满足该条件为true,多个条件进行多次判断 判断完成之后 会

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包