web-dev-qa-db-ja.com

sparkデータフレームのフィルターの複数の条件

4つのフィールドを持つデータフレームがあります。フィールド名の1つが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()
26
dheee

の代わりに:

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

試してください:

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

この質問には回答しましたが、今後の参照のために、この質問のコンテキストで、Dataset/Dataframeのwhereおよびfilterメソッドは2つの構文をサポートしていることに言及したいと思います。

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

およびColベースのパラメーター( @ David で言及):

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

OPはこれら2つの構文を組み合わせたようです。個人的には、最初の構文が好まれるのは、より簡潔で汎用的だからです。

6
Amin

スパーク/スカラでは、可変引数でフィルタリングするのは非常に簡単です。

val d = spark.read...//data contains column named matid
val ids = Seq("BNBEL0608AH", "BNBEL00608H")
val filtered = d.filter($"matid".isin(ids:_*))
1
Tony Fraser
df2 = df1.filter("Status=2")
     .filter("Status=3");
1
pheww

フィルターを使用する必要があります

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

Java sparkデータセットでは、次のように使用できます。

データセットuserfilter = user.filter(col( "gender")。isin( "male"、 "female"));

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

私のために働いた。

0
Mr. Simple