it-roy-ru.com

несколько условий для фильтрации в кадрах искровых данных

У меня есть фрейм данных с четырьмя полями. одно из имен полей - Status, и я пытаюсь использовать условие OR в .filter для фрейма данных. Я попробовал ниже вопросы, но не повезло.

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

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

Кто-нибудь использовал это раньше. Я видел аналогичный вопрос о переполнении стека здесь . Они использовали приведенный ниже код для использования условия OR. Но этот код для 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

Вместо:

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

Пытаться:

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

На этот вопрос дан ответ, но для дальнейшего использования я хотел бы отметить, что в контексте этого вопроса методы where и filter в Dataset/Dataframe поддерживают два синтаксиса: Параметры строки SQL:

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

и параметры на основе Col (упоминаются как @David ):

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

Похоже, что OP объединил эти два синтаксиса. Лично я предпочитаю первый синтаксис, потому что он чище и более универсален.

3
Amin

Вам нужно использовать фильтр 

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

В spark/scala довольно легко фильтровать с помощью varargs.

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