2016-05-19 13 views
5

Ich versuche, einen neuen Datenrahmen durch Filter aus den Reihen zu schaffen, die null oder eine leere Zeichenfolge ist unter dem Code:Datenrahmen Fehler: „überladene Methode Wertfilter mit Alternativen“

val df1 = df.filter(df("fieldA") != "").cache() 

Dann habe ich die folgender Fehler:

<console>:32: error: overloaded method value filter with alternatives: 
     (conditionExpr: String)org.apache.spark.sql.DataFrame <and> 
     (condition: org.apache.spark.sql.Column)org.apache.spark.sql.DataFrame 
    cannot be applied to (Boolean) 
        val df1 = df.filter(df("fieldA") != "").cache() 
           ^

Weiß jemand, was ich hier verpasst habe? Vielen Dank!

val df1 = df.filter(df("fieldA") !== "").cache() 

Alternativ können Sie einen Ausdruck verwenden: Gleichheit spaltenweise, vergleichen Sie === und !== (oder =!= in Spark-2.0+) verwenden sollten

Antwort

10

In Scala, um

val df1 = df.filter("fieldA != ''").cache() 

Ihr Fehler ist aufgetreten, weil der Operator != in jedem Scala-Objekt vorhanden ist und zum Vergleichen von Objekten verwendet wird, wobei immer Boolean zurückgegeben wird. Die Funktion filter erwartet jedoch ein Column-Objekt oder einen Ausdruck in einem String. Daher gibt es den Operator !== in der Klasse Column, der eine andere Spalte zurückgibt und dann so verwendet werden kann, wie Sie möchten.

Um alle verfügbaren Operationen für Spalten zu sehen, ist die Column scaladoc sehr nützlich. Außerdem gibt es das functions Paket.

Verwandte Themen