Фильтр Искра 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'
Это прекрасно работает.