2016-04-27 14 views
9

Qual è la sintassi corretta per il filtro su più colonne nell'API Scala? Se voglio fare qualcosa di simile:Spark SQL campi multipli

dataFrame.filter($"col01" === "something" && $"col02" === "something else") 

o

dataFrame.filter($"col01" === "something" || $"col02" === "something else") 

EDIT:

Questo è ciò che il mio codice originale assomiglia. Tutto arriva come una stringa.

df.select($"userID" as "user", $"itemID" as "item", $"quantity" cast("int"), $"price" cast("float"), $"discount" cast ("float"), sqlf.substring($"datetime", 0, 10) as "date", $"group") 
    .filter($"item" !== "" && $"group" !== "-1") 
+0

Sembra OK. Hai problemi? – zero323

+1

Se non funziona, potresti semplicemente perdere 'import sqlContext.implicits._', dove' sqlContext' è un'istanza di 'SQLContext' o' HiveContext'. –

+0

Stavo ottenendo "value && non è un membro di String". La soluzione è racchiudere ciascuna affermazione in una parentesi. – gstvolvr

risposta

14

Penso di vedere qual è il problema. Per qualche motivo, la scintilla non consente due! = 'S nello stesso filtro . È necessario esaminare il modo in cui il filtro è definito nel codice sorgente Spark.

Ora, per il codice per lavorare, è possibile utilizzare questo per fare il filtro

df.filter(col("item").notEqual("") && col("group").notEqual("-1")) 

o utilizzare due filtri in stessa istruzione

df.filter($"item" !== "").filter($"group" !== "-1").select(....) 

Questo collegamento here può aiutare con diversi metodi di scintilla.

+0

Ciao @dheee? Sai se entrambe le opzioni hanno lo stesso rendimento? – servatj

+1

@servatj Non ho visto alcuna differenza nelle prestazioni da parte mia. – dheee

+0

! == nella classe Column è deprecato e! == non ha la stessa precedenza di ===. quindi riconsolo a usare =! = invece. –

Problemi correlati