web-dev-qa-db-de.com

mehrere Bedingungen für das Filtern in Funken-Datenrahmen

Ich habe einen Datenrahmen mit vier Feldern. Einer der Feldnamen ist Status und ich versuche, in .filter eine OR - Bedingung für einen Datenrahmen zu verwenden. Ich habe versucht, unter Abfragen, aber kein Glück.

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

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

Hat jemand das schon mal benutzt. Ich habe eine ähnliche Frage zum Stapelüberlauf hier gesehen. Der folgende Code wurde für die Verwendung der Bedingung OR verwendet. Aber dieser Code ist für Pyspark.

from pyspark.sql.functions import col 

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

Anstatt:

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

Versuchen:

df2 = df1.filter($"Status" === 2 || $"Status" === 3)
34
David Griffin

Diese Frage wurde beantwortet, aber zur späteren Bezugnahme möchte ich erwähnen, dass im Kontext dieser Frage die Methoden where und filter in Dataset/Dataframe zwei Syntax unterstützen: Die SQL-String-Parameter:

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

und Col-basierte Parameter (erwähnt mit @David ):

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

Es scheint, als hätte das OP diese beiden Syntax kombiniert. Ich persönlich bevorzuge die erste Syntax, weil sie sauberer und generischer ist.

3
Amin
df2 = df1.filter("Status=2")
     .filter("Status=3");
1
pheww

Sie müssen Filter verwenden 

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

  }
}
1
vaquar khan

In spark/scala ist es ziemlich einfach, mit varargs zu filtern.

val d = spark.read...//data contains column named matid
val ids = Seq("BNBEL0608AH", "BNBEL00608H")
val filtered = d.filter($"matid".isin(ids:_*))
0
Tony Fraser

In Java spark dataset kann es als verwendet werden

Datensatz userfilter = user.filter (col ("gender"). Isin ("male", "female"));

0
dominicrd
df2 = df1.filter("Status = 2 OR Status = 3")

Hat für mich gearbeitet.

0
Mr. Simple