2016-04-12 10 views
6

私のSpark Dataframeから行をフィルタリングしようとしています。SparkのColumn.isin関数がリストを取得しない

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

は残念ながら、私はそれがscala.collection.Seqリスト私はリテラルをしたくないと思い

を取るdocumentationに応じて、サポートされていないリテラルの型エラー

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

を取得しますか?それでは、私は何を取り入れることができますか、ある種のラッパークラスですか?

答えて

6

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

これも私がhttp://stackoverflow.com/questions/6051302/上で何が起こっていたかを理解する助けwhat-does-colon-underscore-star-in-scala –

+0

これはすべてScala言語仕様です。 :) – eliasah

関連する問題