Фильтр Искра DataFrame в строке содержит

Я использую Spark 1.3.0 и Spark Avro 1.0.0.  Я работаю с примером на странице хранилища. Следующий код хорошо работает

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

Но что, если мне нужно посмотреть, содержит ли строка doctor подстроку? Так как мы пишем наше выражение внутри строки. Что я делаю, чтобы сделать "содержит"?

Ответы

Ответ 1

Вы можете использовать contains (это работает с произвольной последовательностью):

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

like (SQL как с обычным регулярным выражением SQL с _, соответствующим произвольному символу, и % соответствует произвольной последовательности):

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

или rlike (например, с помощью регулярных выражений Java):

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

в зависимости от ваших требований. like и rlike также должны работать с выражениями SQL.

Ответ 2

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

where column_n like 'xyz%'

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

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

where column_n RLIKE '^xyz' 

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