2016-03-09 84 views
16

我有一個有四個字段的數據框。其中一個字段名稱是Status,我試圖在.filter中爲數據框使用OR條件。我嘗試了下面的查詢,但沒有運氣。火花數據幀中過濾器的多個條件

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

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

有沒有人使用過此之前。我在堆棧溢出here上看到過類似的問題。他們使用下面的代碼來使用OR條件。但是這個代碼是針對pyspark的。

from pyspark.sql.functions import col 

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

通過這條線來看:'斯卡拉>從pyspark.sql。列導入列'看起來像你試圖使用pyspark代碼時,你真的y使用scala –

+0

@TonyTorres是的,這是一個錯誤,我發現後,發佈這個問題。現在進行編輯。 – dheee

回答

22

相反的:

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

嘗試:

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

謝謝。這工作。 – dheee

+3

'==='的反面是'=!=' – Boern

+2

取決於版本 - 對於2.0以前的版本,使用'!=='但在版本2.0.0之後'!=='沒有相同的優先級'===',使用'=!='代替 –

0

你需要使用過濾器

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

    } 
}