web-dev-qa-db-fra.com

Opérateur LIKE Pyspark dataframe LIKE

Quel est l’équivalent dans Pyspark pour l’opérateur LIKE? Par exemple, je voudrais faire:

SELECT * FROM table WHERE column LIKE "*somestring*";

cherchez quelque chose de facile comme ça (mais ça ne marche pas):

df.select('column').where(col('column').like("*s*")).show()
8
Babu

Vous pouvez utiliser les fonctions where et col pour faire la même chose. where sera utilisé pour filtrer les données en fonction d'une condition (le cas échéant, si une colonne ressemble à '%string%') col('col_name') est utilisé pour représenter la condition et like est l'opérateur:

df.where(col('col1').like("%string%")).show()
21
braj

Utilisez l'opérateur similaire. 

https://spark.Apache.org/docs/latest/api/python/pyspark.sql.html#module-pyspark.sql.functions

df.filter(df.column.like('%s%')).show()
1
Rahul

Dans pyspark, vous pouvez toujours enregistrer le dataframe en tant que table et l'interroger.

df.registerTempTable('my_table')
query = """SELECT * FROM my_table WHERE column LIKE '*somestring*'"""
sqlContext.sql(query).show()
1
sau

Eh bien ... il devrait y avoir SQL comme regexp ->

df.select('column').where(col('column').like("%s%")).show()
1
Babu

Pour répliquer la ILIKE insensible à la casse, vous pouvez utiliser lower avec like.

from pyspark.sql.functions import lower

df.where(lower(col('col1')).like("%string%")).show()
0
yardsale8

J'utilise toujours un fichier UDF pour implémenter une telle fonctionnalité:

from pyspark.sql import functions as F 
like_f = F.udf(lambda col: True if 's' in col else False, BooleanType())
df.filter(like_f('column')).select('column')
0
Allen211