簡體   English   中英

Spark的Column.isin函數不帶List

[英]Spark's Column.isin function does not take List

我正在嘗試從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)

根據文檔,它采用scala.collection.Seq列表

我想我不想要文字? 然后我可以接受什么樣的包裝類呢?

@ 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|
// +------+

發生這種情況是因為底層的Scala實現使用了varargs ,因此Java中的文檔並不完全正確。 它使用@varargs注釋,因此您只需傳入一個數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM