Scala 如果一列是另一列的成员,如何筛选Spark dataframe
我有一个包含两列(一个字符串和一个字符串数组)的数据帧:Scala 如果一列是另一列的成员,如何筛选Spark dataframe,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,我有一个包含两列(一个字符串和一个字符串数组)的数据帧: 根目录 |--用户:字符串(nullable=true) |--用户:数组(nullable=true) ||--元素:字符串(containsnall=true) 如何过滤数据框,使结果数据框只包含user在users中的行?当然,这是可能的,也不是那么困难。要实现这一点,您可以使用UDF import org.apache.spark.sql.functions_ 导入org.apache.spark.sql.types_ val
根目录
|--用户:字符串(nullable=true)
|--用户:数组(nullable=true)
||--元素:字符串(containsnall=true)
如何过滤数据框,使结果数据框只包含
user
在users
中的行?当然,这是可能的,也不是那么困难。要实现这一点,您可以使用UDF
import org.apache.spark.sql.functions_
导入org.apache.spark.sql.types_
val df=sc.parallelize(数组(
(“1”,数组(“1”、“2”、“3”),
(“2”,数组(“1”、“2”、“2”、“3”),
(“3”,数组(“1”,“2”))
)).toDF(“用户”、“用户”)
val inArray=udf((id:String,数组:scala.collection.mutable.WrappedArray[String])=>array.contains(id),BooleanType)
df.where(inArray($“user”,$“users”)).show()
输出为:
+----+------------+
|user| users|
+----+------------+
| 1| [1, 2, 3]|
| 2|[1, 2, 2, 3]|
+----+------------+
快速简单:
import org.apache.spark.sql.functions.expr
df.where(expr("array_contains(users, user)")
谢谢这两个和被接受的一个工作,但我只能接受一个作为答案。