我想从所有 Dataframe 中筛选出那些类型出现在错误类型 Dataframe 中的记录(它有大约2000条记录)。我将错误类型df转换为字符串列表,然后在筛选器中检查记录是否在该列表中。以下是我的代码:
import org.apache.spark.sql.functions._
import spark.implicits._
val allData = Seq(
("id1", "X"),
("id2", "X"),
("id3", "Y"),
("id4", "A")
).toDF("id", "type")
val wrongTypes = Seq(
("X"),
("Y"),
("Z")
).toDF("type").select("type").map(r => r.getString(0)).collect.toList
allData.filter(col("type").isin(wrongTypes)).show()
我得到了这个错误:
SparkRuntimeException: The feature is not supported: literal for 'List(X, Y, Z)' of class scala.collection.immutable.$colon$colon.
3条答案
按热度按时间tf7tbtn21#
57hvy0tb2#
isin()
是具有可变数目参数的函数,如果要将集合传递给它,则必须使用Splat运算符:另一种选择是使用参数为
Iterable
的isInCollection()
。我建议使用它,就像您提到的那样,您预计大约有2K个条目。whlutmcx3#
如果
wrongTypes
Dataframe 很大,您可能不想收集结果,而只使用 Dataframe 。我不确定如何在 Dataframe 级别上表示它,但在SQL术语中,您希望使用
IN
子句,如下所示: