![](/img/trans.png)
[英]How to search a string in an array of strings using Apache Spark SQL query?
[英]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.