Filtre spark DataFrame sur la chaîne contient

j'utilise étincelle 1.3.0 et Spark Avro 1.0.0. Je travaille à partir de l'exemple sur la page de référentiel. Ce code suivant fonctionne bien

val df = sqlContext.read.avro("src/test/resources/episodes.avro")
df.filter("doctor > 5").write.avro("/tmp/output")

Mais si j'avais besoin de voir si le doctor chaîne de caractères contient une sous-chaîne? Puisque nous écrivons notre expression à l'intérieur d'une chaîne. Que dois-je faire pour faire un "contient"?

20
demandé sur merv 2016-03-03 01:06:24

1 réponses

Vous pouvez utiliser contains (cela fonctionne avec une suite arbitraire):

df.filter($"foo".contains("bar"))

like SQL (comme avec SQL expression régulière simple avec _ correspondant à un caractère arbitraire et % correspondant à une suite arbitraire):

df.filter($"foo".like("bar"))

ou rlike (Java expressions régulières):

df.filter($"foo".rlike("bar"))

selon vos besoins. LIKE et RLIKE devrait aussi fonctionner avec les expressions SQL.

39
répondu zero323 2016-07-29 11:54:23