2015-11-29 3 views
7

Als vereinfachtes Beispiel habe ich versucht, einen Spark-Datenrahmen mit folgenden Code zu filtern:Filter Funkendatenrahmen durch Prüfen, ob Wert in einer Liste ist, mit anderen Kriterien

val xdf = sqlContext.createDataFrame(Seq(
    ("A", 1), ("B", 2), ("C", 3) 
)).toDF("name", "cnt") 
xdf.filter($"cnt" >1 || $"name" isin ("A","B")).show() 

Dann ist es Fehler:

org.apache.spark.sql.AnalysisException: cannot resolve '((cnt > 1) || name)' due to data type mismatch: differing types in '((cnt > 1) || name)' (boolean and string).; 

Was ist der richtige Weg? Es scheint mir, dass es nach name Spalte zu lesen aufhört. Ist es ein Fehler im Parser? Ich verwende Funke 1.5.1

Antwort

12

Sie einzelne Ausdrücke klammern haben:

xdf.filter(($"cnt" > 1) || ($"name" isin ("A","B"))).show() 
15

der Hoffnung, das wird Ihnen helfen:

val list = List("x","y","t") 
xdf.filter($"column".isin(list:_*)) 
+2

was bedeutet das ': _ *' tun? –

+1

Es ist Scala Annotation-Funktion. – pschilakanti

+0

was bedeutet das? –

Verwandte Themen