繁体   English   中英

如何使用字符串数组过滤 Spark 数据框中的列?

[英]How to filter a column in Spark dataframe using a Array of strings?

我必须使用 Array[String] 过滤 spark 数据框中的列

我有一个如下所示的参数文件,

variable1=100,200

我读取参数文件并用“=”分割每一行并加载到 Map[String,String] 为了获得值,我传递键“varaible1”并用“,”分割值

val value1:Array[String] = parameterValues("varaible1").split(",")

现在我需要在过滤数据帧时使用这个 value1。

val finalDf = testDf.filter("column1 in ($value1) and column2 in ($value1)")

我收到以下错误,

org.apache.spark.sql.catalyst.parser.ParseException: 
mismatched input '(' expecting <EOF>(line 1, pos 12)

== SQL ==
column1 in ([Ljava.lang.String;@760b9444) and column2 in ([Ljava.lang.String;@5397d41e)
------------^^^

有什么建议?

要按数组过滤列,可以使用isin column 方法:

import org.apache.spark.sql.functions.col

val finalDf = testDf.filter(col("column1").isin(value1: _*) && col("column2").isin(value1: _*))

您可以像以前一样使用数组过滤列。 要更正您的 SQL 表达式,您需要做两件事。

首先,您忘记将 's' 字符串插值器放在表示 SQL 表达式的字符串的开头,如下所示:

s"column1 in ($value1) and column2 in ($value1)"

然后,您需要将Array[String]转换为格式正确的 String,该字符串将被理解为 SQL 数组。 为此,您可以在value1数组上使用mkString方法:

value1.mkString("'", "','","'")

在您的数组Array("100", "200") ,此方法将返回字符串"'100','200'"

如果我们把所有东西都包起来,我们会得到以下表达式:

val finalDf = testDf.filter(s"column1 in (${value1.mkString("'", "','","'")}) and column2 in (${value1.mkString("'", "','","'")})")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM