Spark的Column.isin函数不带List

时间:2016-04-12 02:37:50

标签: java scala apache-spark

我正在尝试过滤Spark Dataframe中的行。

val sequence = Seq(1,2,3,4,5)
df.filter(df("column").isin(sequence))

不幸的是,我得到了一个不受支持的文字类型错误

java.lang.RuntimeException: Unsupported literal type class scala.collection.immutable.$colon$colon List(1,2,3,4,5)

根据documentation,它需要一个scala.collection.Seq列表

我想我不想要文字?然后我可以接受什么样的包装类呢?

2 个答案:

答案 0 :(得分:8)

@ JustinPihony的答案是正确的,但它不完整。 isin函数为参数采用重复参数,因此您需要将其传递给:

scala> val df = sc.parallelize(Seq(1,2,3,4,5,6,7,8,9)).toDF("column")
// df: org.apache.spark.sql.DataFrame = [column: int]

scala> val sequence = Seq(1,2,3,4,5)
// sequence: Seq[Int] = List(1, 2, 3, 4, 5)

scala> val result = df.filter(df("column").isin(sequence : _*))
// result: org.apache.spark.sql.DataFrame = [column: int]

scala> result.show
// +------+
// |column|
// +------+
// |     1|
// |     2|
// |     3|
// |     4|
// |     5|
// +------+

答案 1 :(得分:0)

这种情况正在发生,因为基础Scala implementation uses varargs,因此Java中的文档不太正确。它使用@varargs注释,因此您可以just pass in an array.