2016-03-09 12 views
16

Mam ramkę danych z czterema polami. jedną z nazw pól jest Status i próbuję użyć warunku OR w .filter dla ramki danych. Wypróbowałem poniższe zapytania, ale bez powodzenia.wiele warunków dla filtra w ramkach danych iskrowych

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

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

Czy ktoś kiedyś tego użył. Widziałem podobne pytanie na przepełnienie stosu here. Użyli oni poniższego kodu do korzystania z warunku OR. Ale ten kod jest dla pyspark.

from pyspark.sql.functions import col 

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

Sądząc po tej linii: 'scala> od pyspark.sql. kolumna import Kolumny "wydaje się, że próbujesz użyć kodu Pyspark, gdy jesteś actuall y używając scala –

+0

@TonTorres Tak, to był błąd, zdałem sobie z tego sprawę po opublikowaniu tego pytania. dokonanie tej edycji teraz. – dheee

Odpowiedz

22

Zamiast:

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

Spróbuj:

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

Dziękuję. To się udało. – dheee

+3

Przeciwieństwem '===' jest '=! =' – Boern

+2

Zależy od wersji - w wersji przed 2.0, użyj '! ==', ale po wersji 2.0.0 '! ==' nie ma takiego samego pierwszeństwa jak '===', użyj '=! =' zamiast –

0

Trzeba użyć filtr

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

    } 
} 
Powiązane problemy