在PySpark中对多个单词使用LIKE运算符

时间:2018-10-19 09:35:20

标签: dataframe pyspark where sql-like

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

+-----+--------------------+-------+
|   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%')")

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

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

3 个答案:

答案 0 :(得分:2)

您可以尝试

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

答案 1 :(得分:2)

这对我有用

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

答案 2 :(得分:0)

在pyspark中,SparkSql语法:

DATE_DEFAULT_TIMEZONE_SET('AFRICA/NAIROBI');

$current_time= strtotime("2016-09-02 05:45:00"); 

    $time_ago = strtotime("2018-01-02 05:45:00");
    $diff=$current_time-$time_ago;
    $minutes=ceil($diff/60/60);
    echo "$minutes ago";

$days=ceil($diff/60/60/24);

    $days=ceil($diff/60/60/24);

echo "$days ago";

    $months = ceil($diff/60/60/24/30);
    echo "$days ago";

可能不起作用。

使用:

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

说明:它将过滤以where column_n RLIKE '^xyz|abc' abc开头的所有单词。

这很好用。