如果包含字符串列表,则过滤 pyspark 数据帧

2024-04-30

假设我们有一个 pyspark 数据框,其列之一 (column_a) 包含一些字符串值,并且还有一个字符串列表 (list_a).

数据框:

column_a      | count
some_string   |  10
another_one   |  20
third_string  |  30

list_a:

['string', 'third', ...]

我想过滤此数据框,并且仅在 column_a 的值包含 list_a 的项目之一时保留行。

这是用于过滤的代码column_a基于单个字符串:

df['column_a'].like('%string_value%')

但是我们如何才能对字符串列表获得相同的结果呢? (保留column_a的值为'string','third',...的行)


IIUC,您想要返回其中的行column_a是“像”(在 SQL 意义上)中的任何值list_a.

一种方法是使用functools.reduce:

from functools import reduce

list_a = ['string', 'third']

df1 = df.where(
    reduce(lambda a, b: a|b, (df['column_a'].like('%'+pat+"%") for pat in list_a))
)
df1.show()
#+------------+-----+
#|    column_a|count|
#+------------+-----+
#| some_string|   10|
#|third_string|   30|
#+------------+-----+

本质上你循环了所有可能的字符串list_a进行比较like并对结果进行“或”操作。这是执行计划:

df1.explain()
#== Physical Plan ==
#*(1) Filter (Contains(column_a#0, string) || Contains(column_a#0, third))
#+- Scan ExistingRDD[column_a#0,count#1]

另一种选择是使用pyspark.sql.Column.rlike http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.Column.rlike代替like http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.Column.like.

df2 = df.where(
    df['column_a'].rlike("|".join(["(" + pat + ")" for pat in list_a]))
)

df2.show()
#+------------+-----+
#|    column_a|count|
#+------------+-----+
#| some_string|   10|
#|third_string|   30|
#+------------+-----+

其中有对应的执行计划:

df2.explain()
#== Physical Plan ==
#*(1) Filter (isnotnull(column_a#0) && column_a#0 RLIKE (string)|(third))
#+- Scan ExistingRDD[column_a#0,count#1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果包含字符串列表,则过滤 pyspark 数据帧 的相关文章

随机推荐

  • 开发目录结构[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 iPhone 版 gmap 中的经纬度计算两个地点之间的距离 [重复]

    这个问题在这里已经有答案了 可能的重复 GPS 坐标 以度为单位 来计算距离 https stackoverflow com questions 6994101 gps coordinates in degrees to calculate
  • 获取 iPhone 文档目录。 NSSearchPathForDirectoriesInDomains 仍然是唯一的方法吗?

    Is the NSSearchPathForDirectoriesInDomainss 函数仍然是获取 iPhone Documents 目录路径的最佳方法吗 我之所以这么问 是因为我看到的大多数主题都是去年的 而且这似乎仍然是获取 iPh
  • 将 Django/Python 3.4 部署到 Heroku

    我正在尝试使用 Django Heroku 入门教程使用 Django Heroku 部署我的第一个示例应用程序 我的工具 Python 3 4 和 Windows 7 PowerShell 我的挑战 部署到 Heroku 失败 我不知道为
  • App.config 连接字符串相对路径

    我需要在 app config 中设置 sqlite 连接字符串 我想设置相对于调试 发布文件夹的路径 数据库文件将复制到这些文件夹
  • Windows命令行参数编码是什么?

    Windows 使用什么编码来传递给在 cmd exe 窗口中启动的程序的命令行参数 命令行参数的编码似乎不受使用控制台代码页设置的影响chcp 我将其设置为 UTF 8 代码页 65001 并使用 Lucida Console 字体 如果
  • Python 中的静态变量?

    在 C 中 我们有 static 关键字 它在循环中是这样的 for int x 0 x lt 10 x for int y 0 y lt 10 y static int number of times 0 number of times
  • 不循环查找

    我有两个表 我正在尝试从一个表中查找值以添加到另一个表中的值 目前我正在使用两个 for 循环 但它们运行缓慢 我是 R 新手 知道我应该避免循环以加快速度 但我不知道如何做 表1 几千行 37列 type cat1 cat2 cat3 c
  • C++ 的异步函数调用

    我需要提示如何在 C C 中实现异步函数调用 或 Windows 和 或 Linux 的框架 API 调用的名称 用例如下 父线程调用函数 该函数创建一个子线程并返回 因此调用是非阻塞的 父线程可以继续执行某些工作 例如 pthread j
  • React PropTypes:数字范围

    有没有更好的方法来验证如果数字在范围内 避免写作 PropTypes oneOf 1 2 3 4 5 6 7 8 9 10 根据文档 https reactjs org docs typechecking with proptypes ht
  • Sentry django 配置 - 记录器

    我正在尝试使用简单的日志记录并希望将错误 异常发送到 Sentry 我按照文档配置了 Sentry 并在我的开发人员上成功运行了测试 python manage py raven test 我添加了日志记录配置 如下所示哨兵文档 https
  • 使用 Struts 2 的 RESTful Web 服务

    我们正在评估一种教育活动设计 我们希望以 RESTful Web 服务的形式创建完整的后端 处理业务逻辑 这些服务可供各种应用程序使用 从 Struts 2 框架调用这些 Web 服务是个好主意吗 我读了几篇文档 但人们不鼓励这样做 我们很
  • REST 服务上的错误请求错误 使用 POST(json 数据)调用方法?

    您好 我是 RESTful WCF 的新手 我正在尝试使用 POST 对 Web 服务方法进行简单调用 这是我的代码 Service Interface code ServiceContract public interface IJson
  • 对于包含“+”的 Artifact 版本,Azure Artifact 发布失败

    我一直在尝试将 java 模块 jar 的工件发布到 Azure Artifact 但收到错误 404 经过一段时间的调试我已经意识到我的语义版本 https semver org spec item 10破坏了 URL 1 0 2 bet
  • Ruby Koans #75 test_constants_become_symbols,正确答案?

    我的问题建立在这个问题的基础上 Ruby Koan 常量变成符号 https stackoverflow com questions 5358727 ruby koan constants become symbols 我有以下代码 in
  • 使用MySqlCommand参数时如何查看命令字符串?

    代码如下 MySqlCommand cmd new MySqlCommand SELECT FROM DB name here WHERE some field some value cmd Parameters AddWithValue
  • 该应用程序引用 Payload Capacitor.Framework STATE_ERROR.VALIDATION_ERROR.50 中的非公共选择器

    今天 我在尝试将电容器应用程序上传到 App Store 时遇到了问题 该应用程序是在几天前发布的 据我了解 上传的任何关键内容都没有改变 我收到的错误也没有说明实际问题 The error looks the following 并说 该
  • Azure Function Docker 无法使用 http 触发器

    最近 我使用具有 HttpTrigger 的 Azure Function 节点 创建了一个 docker 映像 这是默认生成的基本 HttpTrigger 我正在 Macbook Pro MoJave 上开发此程序 并且安装了以下工具 N
  • 如何根据鼠标位置显示工具提示? - JavaFX

    我有一个stackPane 充满一个圆圈和几条线 我想在将鼠标悬停在 StackPane 上时显示工具提示 并且工具提示应包含X Y coords鼠标的 我知道如何获取鼠标的坐标 但我无法找到显示工具提示的方法 你们中有人能帮我吗 安舒尔
  • 如果包含字符串列表,则过滤 pyspark 数据帧

    假设我们有一个 pyspark 数据框 其列之一 column a 包含一些字符串值 并且还有一个字符串列表 list a 数据框 column a count some string 10 another one 20 third str