2016-03-09 10 views
16

मेरे पास चार फ़ील्ड के साथ डेटा फ्रेम है। फ़ील्ड नाम में से एक स्थिति है और मैं डेटाफ्रेम के लिए .filter में एक OR स्थिति का उपयोग करने का प्रयास कर रहा हूं। मैंने प्रश्नों के नीचे कोशिश की लेकिन कोई किस्मत नहीं।स्पार्क डेटा फ्रेम में फ़िल्टर के लिए कई स्थितियां

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

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

क्या किसी ने इससे पहले इसका उपयोग किया है। मैंने स्टैक ओवरफ़्लो here पर एक समान प्रश्न देखा है। उन्होंने या स्थिति का उपयोग करने के लिए कोड के नीचे उपयोग किया है। लेकिन वह कोड 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 से। कॉलम आयात कॉलम 'ऐसा लगता है कि जब आप actuall हैं तो आप pyspark कोड का उपयोग करने का प्रयास कर रहे हैं y scala –

+0

@ टोनटोरस का उपयोग करके हाँ यह एक गलती थी जिसे मैंने महसूस किया कि इस प्रश्न को पोस्ट करने के बाद। इसे अब संपादित करना। – 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() 

    } 
} 
संबंधित मुद्दे