2016-03-09 13 views
16

Ho un frame di dati con quattro campi. uno dei nomi dei campi è Status e sto cercando di utilizzare una condizione OR in .filter per un dataframe. Ho provato sotto le domande ma senza fortuna.condizioni multiple per filtro nei telegrammi scintilla

df2 = df1.filter(("Status=2") || ("Status =3")) 

df2 = df1.filter("Status=2" || "Status =3") 

Qualcuno ha mai usato questo prima. Ho visto una domanda simile sullo stack overflow here. Hanno usato sotto il codice per l'utilizzo della condizione OR. Ma quel codice è per pyspark.

from pyspark.sql.functions import col 

numeric_filtered = df.where(
(col('LOW') != 'null') | 
(col('NORMAL') != 'null') | 
(col('HIGH') != 'null')) 
numeric_filtered.show() 
+1

A giudicare da questa linea: 'scala> da pyspark.sql. colonna Importa colonna 'sembra che tu stia cercando di usare il codice pyspark quando sei in azione y usando scala –

+0

@TonTorres Sì, è stato un errore che ho capito dopo aver postato questa domanda. facendo questo modifica ora. – dheee

risposta

22

Invece di:

df2 = df1.filter("Status=2" || "Status =3") 

Prova:

df2 = df1.filter($"Status" === 2 || $"Status" === 3) 
+0

Grazie. Ha funzionato. – dheee

+3

L'opposto di '===' è '=! =' – Boern

+2

Dipende dalla versione - per pre-2.0, usa '! ==' ma dopo la versione 2.0.0 '! ==' non ha la stessa precedenza di '===', usa '=! =' invece –

0

È necessario utilizzare il filtro

package dataframe 

import org.apache.spark.sql.SparkSession 
/** 
* @author [email protected] 
*/ 
// 

object DataFrameExample{ 
    // 
    case class Employee(id: Integer, name: String, address: String, salary: Double, state: String,zip:Integer) 
    // 
    def main(args: Array[String]) { 
    val spark = 
     SparkSession.builder() 
     .appName("DataFrame-Basic") 
     .master("local[4]") 
     .getOrCreate() 

    import spark.implicits._ 

    // create a sequence of case class objects 

    // (we defined the case class above) 

    val emp = Seq( 
    Employee(1, "vaquar khan", "111 algoinquin road chicago", 120000.00, "AZ",60173), 
    Employee(2, "Firdos Pasha", "1300 algoinquin road chicago", 2500000.00, "IL",50112), 
    Employee(3, "Zidan khan", "112 apt abcd timesqure NY", 50000.00, "NY",55490), 
    Employee(4, "Anwars khan", "washington dc", 120000.00, "VA",33245), 
    Employee(5, "Deepak sharma ", "rolling edows schumburg", 990090.00, "IL",60172), 
    Employee(6, "afaq khan", "saeed colony Bhopal", 1000000.00, "AZ",60173) 
    ) 

    val employee=spark.sparkContext.parallelize(emp, 4).toDF() 

    employee.printSchema() 

    employee.show() 


    employee.select("state", "zip").show() 

    println("*** use filter() to choose rows") 

    employee.filter($"state".equalTo("IL")).show() 

    println("*** multi contidtion in filer || ") 

    employee.filter($"state".equalTo("IL") || $"state".equalTo("AZ")).show() 

    println("*** multi contidtion in filer && ") 

    employee.filter($"state".equalTo("AZ") && $"zip".equalTo("60173")).show() 

    } 
}