web-dev-qa-db-ja.com

次を含む文字列のフィルターspark DataFrame

Spark 1.3. および Spark Avro 1.0. を使用しています。 リポジトリページの例 から作業しています。次のコードはうまく機能します

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

しかし、doctor文字列に部分文字列が含まれているかどうかを確認する必要がある場合はどうでしょうか。文字列内に式を書いているので。 「含む」を行うにはどうすればよいですか?

25
Knows Not Much

containsを使用できます(これは任意のシーケンスで機能します)。

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

like(任意の文字に一致する_および任意のシーケンスに一致する%を含むSQLの単純な正規表現を使用したSQL):

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

またはrlikeJava正規表現 と同様):

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

要件に応じて。 LIKEおよびRLIKEは、SQL式でも機能するはずです。

58
zero323

Pyspark、SparkSql構文では:

where column_n like 'xyz%'

動作しない可能性があります。

つかいます:

where column_n RLIKE '^xyz' 

これは完璧に機能します。

0
Jay1991