将过滤器作为参数传递给Dataframe.filter函数

时间:2018-10-15 07:07:26

标签: scala apache-spark dataframe

我有一个数据框userdf

val userdf = sparkSession.read.json(sparkContext.parallelize(Array("""[{"id" : 1,"name" : "user1"},{"id" : 2,"name" : "user2"}]"""))

scala> userdf.show
+---+-----+
| id| name|
+---+-----+
|  1|user1|
|  2|user2|
+---+-----+

我想使用id === 1来检索用户,同样可以使用

这样的代码来实现
scala> userdf.filter($"id"===1).show
+---+-----+
| id| name|
+---+-----+
|  1|user1|
+---+-----+

我想实现的目标是

val filter1 = $"id"===1
userdf.filter(filter1).show

这些过滤器是从配置文件中提取的,我正在尝试使用此构建块来实现更复杂的查询,例如

userdf.filter(filter1 OR filter2).filter(filter3).show 

其中filter1filter2filter3ANDOR条件是从配置中获取的

谢谢

1 个答案:

答案 0 :(得分:1)

filter方法也可以接受一个字符串,它是一个sql表达式。
该代码应产生相同的结果

userdf.filter("id = 1").show

因此您只需从config获取该字符串