Spark 教程

Spark SQL

Spark 笔记

Spark MLlib

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/spark-dataframe-filter.html

spark dataframe filter 函数过滤操作方法全解

Spark DataFrame 原理及操作详解 Spark DataFrame 原理及操作详解


spark dataframe 对象 filter 函数可以通过指定的条件过滤数据,和 where 函数作用和用法相同,它可以接收字符串类型的 sql 表达式,也可以接受基于 Column 的返回 BooleanType 的列过滤条件。

函数语法

def filter(self, condition):

filter(self, condition) 函数还有一个别名函数 where 函数,该函数是版本 1.3 开始新增的。

  • 参数 condition 支持 2 种形式:

    基于 Column 的返回 BooleanType 的列过滤条件,如 df.filter(df.ctr >= 0.1)

    也支持字符串类型的 sql 表达式,如 df.filter('id is not null')

  • 返回过滤之后的 dataframe 数据对象。

基本操作

filter 函数接受条件参数,可以是列过滤的 bool 表达式,也可以是字符串的形式 sql 条件。

首先手动创建 dataframe 数据,下面示例都是基于该数据进行演示:

from pyspark.sql import SparkSession

spark_session = SparkSession.builder \
    .appName('knowledgedict-dataframe') \
    .master('local') \
    .getOrCreate()

df = spark_session.createDataFrame(
    schema=['id', 'impression', 'click', 'ctr', 'city'],
    data=[(1, 100, 5, 0.05, 'beijing'), (None, 10, 3, 0.3, 'beijing'), (3, 50, 5, 0.1, 'shanghai')]
)

df.show()

展示的 df 对象数据如下:

+----+----------+-----+----+--------+------------------+
|  id|impression|click| ctr|    city|           content|
+----+----------+-----+----+--------+------------------+
|   1|       100|    5|0.05| beijing|         [product]|
|null|        10|    3| 0.3| beijing|[product, article]|
|   3|        50|    5| 0.1|shanghai| [article, person]|
+----+----------+-----+----+--------+------------------+

单列过滤操作

过滤 ctr 大于 0.1 的数据,代码如下:

df.filter(df.ctr >= 0.1).show()

结果如下:

+----+----------+-----+---+--------+------------------+
|  id|impression|click|ctr|    city|           content|
+----+----------+-----+---+--------+------------------+
|null|        10|    3|0.3| beijing|[product, article]|
|   3|        50|    5|0.1|shanghai| [article, person]|
+----+----------+-----+---+--------+------------------+

也可以字符串 sql 表达式进行过滤,示例如下:

df.filter('ctr >= 0.1').show()

多个条件过滤筛选

filter 函数也支持多个条件的过滤筛选,并条件用 and、或用 or,非使用 not 关键字。

过滤 city 为 'beijing' 且 ctr 值大于 0.2 的数据,代码如下:

df.filter("city == 'beijing' and ctr > 0.2").show()

结果如下:

+----+----------+-----+---+-------+------------------+
|  id|impression|click|ctr|   city|           content|
+----+----------+-----+---+-------+------------------+
|null|        10|    3|0.3|beijing|[product, article]|
+----+----------+-----+---+-------+------------------+

过滤列为非空值的数据

过滤 id 列数据为非空值的数据,代码如下:

df.filter('id is not null').show()

输出如下:

+---+----------+-----+----+--------+-----------------+
| id|impression|click| ctr|    city|          content|
+---+----------+-----+----+--------+-----------------+
|  1|       100|    5|0.05| beijing|        [product]|
|  3|        50|    5| 0.1|shanghai|[article, person]|
+---+----------+-----+----+--------+-----------------+

过滤指定数组包含的条件

获取 ctr 大于等于 0.2 或者 content 数组中包含 'person' 的数据,包含关系的操作可以使用 spark 1.5 时新增的 array_contains 函数,具体代码如下:

df.filter("ctr >= 0.2 or array_contains(content, 'person')").show()

输出如下:

+----+----------+-----+---+--------+------------------+
|  id|impression|click|ctr|    city|           content|
+----+----------+-----+---+--------+------------------+
|null|        10|    3|0.3| beijing|[product, article]|
|   3|        50|    5|0.1|shanghai| [article, person]|
+----+----------+-----+---+--------+------------------+

 

在Java中,Lambda表达式结合StreamAPI可以很方便地使用`filter`操作进行集合的过滤。示例代码:###使用自定义的Pre ...
spark dataframe 的 fillna 函数等同于 na.fill(),na.fill 函数底层也是调用 fillna,它的作用是 ...
在 spark 中,过滤 dataframe 对象数据的某个列为 null 值(即空值)的行数据可以使用 filter 函数或 where ...
使用filter()方法进行多条件过滤解释:filter()方法是Django查询集的常见方法之一,它用于根据指定的条件筛选数据库中的记录。 ...
当您提到"Djangofilter"时,我想您可能在讨论Django框架中的数据库查询过滤功能,该功能允许您在从数据库中检索数据时应用筛选条 ...