2016-04-12 9 views
6

Sto provando a filtrare le righe dal mio Spark Dataframe.Spark's Column.isin funzione non accetta Lista

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

Purtroppo, ottengo un errore non supportato tipo letterale

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

secondo il documentation ci vuole una lista scala.collection.Seq

Credo che non voglio un letterale? Allora cosa posso prendere, una sorta di classe wrapper?

risposta

6

@ La risposta di JustinPihony è corretta ma è incompleta. La funzione isin prende un ripetuto parametro per argomento, quindi avrai bisogno di passare come così:

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

anche questo ha aiutato a capire cosa stava succedendo http://stackoverflow.com/questions/6051302/ what-does-colon-underscore-star-do-in-scala –

+0

È tutto nella specifica della lingua di Scala. :) – eliasah

Problemi correlati