てみましょう最初の私たちのpatterns
定義:
val patterns = Seq("foo", "bar")
をし、例DataFrame
作成:
val df = Seq((1, "bar"), (2, "foo"), (3, "xyz")).toDF("id", "contents")
一つの簡単な解決策はpatterns
上fold
にある:
を
val expr = patterns.foldLeft(lit(false))((acc, x) =>
acc || col("contents").like(x)
)
df.where(expr).show
// +---+--------+
// | id|contents|
// +---+--------+
// | 1| bar|
// | 2| foo|
// +---+--------+
もう一つは、正規表現を構築し、rlike
を使用することです:
val expr = patterns.map(p => s"^$p$$").mkString("|")
df.where(col("contents").rlike(expr)).show
// +---+--------+
// | id|contents|
// +---+--------+
// | 1| bar|
// | 2| foo|
// +---+--------+
PS:これは文字通り単純ではない場合は、上記の溶液は動作しない場合があります。
最後に単純なパターンのためにあなたはisin
を使用することができます。
val patternsDF = patterns.map(Tuple1(_)).toDF("contents")
df.join(broadcast(patternsDF), Seq("contents")).show
// +---+--------+
// | id|contents|
// +---+--------+
// | 1| bar|
// | 2| foo|
// +---+--------+
感謝を:
参加することも可能です。 これは最初の解決策として機能します。 2番目と3番目の結果がnullです。 – benchuang
ありがとうございます。最初の解決策は私の要求に合っています。それはうまくいく。 – benchuang