Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何根据列值是否在Spark数据帧中的一组字符串中筛选行_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

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)):_*))