Использование оператора LIKE для нескольких слов в PySpark - PullRequest
0 голосов
/ 19 октября 2018

У меня есть DataFrame df в 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 голосов
/ 19 октября 2018

Это работает для меня

from pyspark.sql import functions as F
df.where(F.col("ID").like('5%') | F.col("ID").like('6%'))
0 голосов
/ 02 сентября 2019

В pyspark синтаксис SparkSql:

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

может не работать.

Использование:

where column_n RLIKE '^xyz|abc' 

Объяснение: Он будет фильтровать все слова, начинающиеся с abc или xyz.

Это прекрасно работает.

0 голосов
/ 19 октября 2018

Можно попробовать

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

...