【问题标题】:Using LIKE operator for multiple words in PySpark在 PySpark 中对多个单词使用 LIKE 运算符
【发布时间】:2018-10-19 09:35:19
【问题描述】:

我在PySpark 中有一个 DataFrame df,如下图所示 -

+-----+--------------------+-------+
|   ID|           customers|country|
+-----+--------------------+-------+
|56   |xyz Limited         |U.K.   |
|66   |ABC  Limited        |U.K.   |
|16   |Sons & Sons         |U.K.   |
|51   |TÜV GmbH            |Germany|
|23   |Mueller GmbH        |Germany|
|97   |Schneider AG        |Germany|
|69   |Sahm UG             |Austria|
+-----+--------------------+-------+

我只想保留ID 从 5 或 6 开始的那些行。所以,我希望我的最终数据框看起来像这样 -

+-----+--------------------+-------+
|   ID|           customers|country|
+-----+--------------------+-------+
|56   |xyz Limited         |U.K.   |
|66   |ABC  Limited        |U.K.   |
|51   |TÜV GmbH            |Germany|
|69   |Sahm UG             |Austria|
+-----+--------------------+-------+

这可以通过多种方式实现,这不是问题。但是,我有兴趣了解如何使用LIKE 语句来完成此操作。

如果我只对ID 从 5 开始的那些行感兴趣,它可以像这样轻松完成 -

df=df.where("ID like ('5%')")

我的问题:如何在 where 子句中添加第二条语句,如 "ID like ('6%')"OR - | 布尔值?我想做如下所示的事情,但是这段代码出错了。所以,简而言之,我如何在此处使用 LIKE and .where 使用多个布尔语句 -

df=df.where("(ID like ('5%')) | (ID like ('6%'))")

【问题讨论】:

    标签: dataframe pyspark where sql-like


    【解决方案1】:

    你可以试试

    df = df.where('ID like "5%" or ID like "6%"')

    【讨论】:

    • 非常感谢平图。你能告诉我为什么把 ' 换成 " 会成功吗?
    • 诀窍是使用代替|。交换 ' 没有任何影响。
    • 哦,我以为我们必须使用管道 |在 PySpark 和 or 中是不允许的。很惊讶。
    • pyspark where 语句同时支持数据帧操作和 sql 查询。您(甚至我)使用的那个是 where 中的 sql。因此,这里支持 or 语句。 Mike 建议使用数据框操作,您不能使用
    • 我也认为它可能与 SQL 类型语法有关,而不是与 DataFrame 语法有关。非常感谢平图。很有帮助。
    【解决方案2】:

    这对我有用

    from pyspark.sql import functions as F
    df.where(F.col("ID").like('5%') | F.col("ID").like('6%'))
    

    【讨论】:

      【解决方案3】:

      在pyspark中,SparkSql语法:

      where column_n like 'xyz%' OR column_n like 'abc%' 
      

      可能不行。

      用途:

      where column_n RLIKE '^xyz|abc' 
      

      说明:它将过滤所有以abcxyz 开头的单词。

      这很好用。

      【讨论】:

      • 嗨,“喜欢”对我来说也很完美,而且代码没有损坏。所以,我会继续这样做。感谢您的 cmets。
      • @cph_sto :是的,它可能适用于少数情况,但在您使用变量替换的情况下,例如 where column_m='%(some_variable)s' 。如果您使用 like 运算符和 % 以及此变量替换然后它将破坏代码,因为 python 会与 % 混淆
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多