2017-10-27 6 views
0

Ich versuche Klausel in Funkendatenrahmen anzuwenden INSpark-Dataframe IN-Klausel wirft Fehler

scala> val filteredDF = resultDF.select("role_id","role","full_name").filter(upper(resultDF("role")).isin(List("DIRECTOR","ACTOR"))) 

Während das obige Kommando ich versucht, den Fehler

java.lang.RuntimeException: Unsupported literal type class scala.collection.immutable.$colon$colon List(DIRECTOR, ACTOR) 
    at org.apache.spark.sql.catalyst.expressions.Literal$.apply(literals.scala:49) 
    at org.apache.spark.sql.functions$.lit(functions.scala:89) 
    at org.apache.spark.sql.Column$$anonfun$isin$1.apply(Column.scala:642) 
    at org.apache.spark.sql.Column$$anonfun$isin$1.apply(Column.scala:642) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 
    at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:34) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) 
    at scala.collection.AbstractTraversable.map(Traversable.scala:105) 
    at org.apache.spark.sql.Column.isin(Column.scala:642) 

Könnte jemand mir helfen, bin immer zu erklären, warum ich diesen Fehler bekomme und wie repariere ich das?

Antwort

0

Sie müssen Werte als separate Argumente isin weitergeben müssen:

.isin("DIRECTOR", "ACTOR") 

Oder verwenden varargs Syntax:

.isin(List("DIRECTOR", "ACTOR"): _*) 
+0

Es funktioniert wie pro Ihren Vorschlag, Sie viel von meiner Zeit gespeichert. Danke –

+0

Froh, dass es hilft! – Psidom