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()
の代わりに:
df2 = df1.filter("Status=2" || "Status =3")
試してください:
df2 = df1.filter($"Status" === 2 || $"Status" === 3)
この質問には回答しましたが、今後の参照のために、この質問のコンテキストで、Dataset/Dataframeのwhere
およびfilter
メソッドは2つの構文をサポートしていることに言及したいと思います。
df2 = df1.filter(("Status = 2 or Status = 3"))
およびColベースのパラメーター( @ David で言及):
df2 = df1.filter($"Status" === 2 || $"Status" === 3)
OPはこれら2つの構文を組み合わせたようです。個人的には、最初の構文が好まれるのは、より簡潔で汎用的だからです。
スパーク/スカラでは、可変引数でフィルタリングするのは非常に簡単です。
val d = spark.read...//data contains column named matid
val ids = Seq("BNBEL0608AH", "BNBEL00608H")
val filtered = d.filter($"matid".isin(ids:_*))
df2 = df1.filter("Status=2")
.filter("Status=3");
フィルターを使用する必要があります
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()
}
}
Java sparkデータセットでは、次のように使用できます。
データセットuserfilter = user.filter(col( "gender")。isin( "male"、 "female"));
df2 = df1.filter("Status = 2 OR Status = 3")
私のために働いた。