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()
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()
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()
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()
Eh bien ... il devrait y avoir SQL comme regexp ->
df.select('column').where(col('column').like("%s%")).show()
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()
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')