2016-05-19 6 views
5

sto cercando di creare un nuovo frame di dati per filtra le righe che è stringa nulla o vuota usando il codice seguente:dataframe errore: "sovraccarico Filtro valore metodo con alternative"

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

Poi ho ricevuto la errore seguente:

<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() 
           ^

Qualcuno sa cosa mi è mancato qui? Grazie!

risposta

10

In Scala, al fine di confrontare l'uguaglianza di colonna-saggio, è necessario utilizzare === e !== (o =!= in Spark 2.0+):

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

In alternativa, è possibile utilizzare l'espressione:

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

Il tuo errore si è verificato perché l'operatore != è presente in ogni oggetto Scala e viene utilizzato per confrontare oggetti, restituendo sempre booleano. Tuttavia, la funzione filter prevede un oggetto Column o un'espressione in una stringa, pertanto è presente l'operatore !== nella classe Column, che restituisce un'altra colonna e può quindi essere utilizzata nel modo desiderato.

Per vedere tutte le operazioni disponibili per le colonne, lo Column scaladoc è molto utile. Inoltre, c'è il pacchetto functions.

Problemi correlati