val df = sc.parallelize(Seq((1,"Emailab"), (2,"Phoneab"), (3, "Faxab"),(4,"Mail"),(5,"Other"),(6,"MSL12"),(7,"MSL"),(8,"HCP"),(9,"HCP12"))).toDF("c1","c2")
+---+-------+
| c1| c2|
+---+-------+
| 1|Emailab|
| 2|Phoneab|
| 3| Faxab|
| 4| Mail|
| 5| Other|
| 6| MSL12|
| 7| MSL|
| 8| HCP|
| 9| HCP12|
+---+-------+
Je souhaite filtrer les enregistrements contenant les 3 premiers caractères de la colonne "c2" ("MSL" ou "HCP").
Donc, la sortie devrait être comme ci-dessous.
+---+-------+
| c1| c2|
+---+-------+
| 1|Emailab|
| 2|Phoneab|
| 3| Faxab|
| 4| Mail|
| 5| Other|
+---+-------+
Quelqu'un peut-il aider s'il vous plaît à ce sujet?
Je savais que df.filter($"c2".rlike("MSL"))
- Ceci est pour sélectionner les enregistrements mais comment exclure les enregistrements. ?
Version: Spark 1.6.2 Note: 2.10
df.filter(not(
substring(col("c2"), 0, 3).isin("MSL", "HCP"))
)
Cela fonctionne aussi. Concis et très similaire à SQL.
df.filter("c2 not like 'MSL%' and c2 not like 'HCP%'").show
+---+-------+
| c1| c2|
+---+-------+
| 1|Emailab|
| 2|Phoneab|
| 3| Faxab|
| 4| Mail|
| 5| Other|
+---+-------+
I used below to filter rows from dataframe and this worked form me.Spark 2.2
val spark = new org.Apache.spark.sql.SQLContext(sc)
val data = spark.read.format("csv").
option("header", "true").
option("delimiter", "|").
option("inferSchema", "true").
load("D:\\test.csv")
import spark.implicits._
val filter=data.filter($"dept" === "IT" )
OR
val filter=data.filter($"dept" =!= "IT" )