Scala 如何根据列值是否在Spark数据帧中的一组字符串中筛选行
有没有一种更优雅的方法可以基于一组字符串中的值进行过滤Scala 如何根据列值是否在Spark数据帧中的一组字符串中筛选行,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,有没有一种更优雅的方法可以基于一组字符串中的值进行过滤 def myFilter(actions: Set[String], myDF: DataFrame): DataFrame = { val containsAction = udf((action: String) => { actions.contains(action) }) myDF.filter(containsAction('action)) } 在SQL中,您可以 select * from my
def myFilter(actions: Set[String], myDF: DataFrame): DataFrame = {
val containsAction = udf((action: String) => {
actions.contains(action)
})
myDF.filter(containsAction('action))
}
在SQL中,您可以
select * from myTable where action in ('action1', 'action2', 'action3')
这个怎么样:
myDF.filter("action in (1,2)")
或
或
你看过
myDF.action.inSet()吗?
?你的语法对我来说毫无意义。您以前使用过Spark数据帧吗?是的,我使用过python。顺便问一下,既然SQL版本适合您,为什么不使用它呢?谢谢!你的例子让我大开眼界。这个解决方案更有效吗?@VijayKrishna与udf?那当然更有效了。udf是不可优化的。
import org.apache.spark.sql.functions.lit
myDF.where($"action".in(Seq(1,2).map(lit(_)):_*))
import org.apache.spark.sql.functions.lit
myDF.where($"action".in(Seq(lit(1),lit(2)):_*))