我必须使用数组[string]过滤sparkDataframe中的一列
我有一个如下的参数文件,
variable1=100,200
我读取参数文件并按“=”分割每一行,然后加载到map[string,string]中,为了得到值,我传递键“varaible1”,并按“,”分割值
val value1:Array[String] = parameterValues("varaible1").split(",")
现在我需要在过滤Dataframe时使用这个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)
------------^^^
有什么建议吗?
2条答案
按热度按时间w3nuxt5m1#
要按数组筛选列,可以使用
isin
列方法:nhaq1z212#
您可以像以前一样使用数组过滤列。要更正sql表达式,需要做两件事。
首先,您忘了在表示sql表达式的字符串的开头添加“s”字符串插值器,如下所示:
然后,你需要转换你的
Array[String]
将被理解为sql数组的格式良好的字符串。为此,您可以使用mkString
你的方法value1
数组:在你的阵型上
Array("100", "200")
,此方法将返回字符串"'100','200'"
如果我们把所有东西都包起来,我们会得到以下表达式: