我有一个Spark数据框,我想根据特定列的匹配值从中选择一些行/记录。 我想我可以使用Filter操作或在地图转换中选择操作来做到这一点。
但是,我想针对那些在应用过滤器时未选择的行/记录更新状态列。
在应用过滤器操作时,作为响应,我得到了一个由匹配记录组成的新数据框。
那么,如何知道和更新未选择的行的列值?
答案 0 :(得分:0)
在应用过滤器操作时,您将获得包含匹配记录的新数据框。
然后,您可以使用 Scala 中的 except 功能从输入数据框中获取不匹配记录。
scala> val inputDF = Seq(("a", 1),("b", 2), ("c", 3), ("d", 4), ("e", 5)).toDF("id", "count")
inputDF: org.apache.spark.sql.DataFrame = [id: string, count: int]
scala> val filterDF = inputDF.filter($"count" > 3)
filterDF: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [id: string, count: int]
scala> filterDF.show()
+---+-----+
| id|count|
+---+-----+
| d| 4|
| e| 5|
+---+-----+
scala> val unmatchDF = inputDF.except(filterDF)
unmatchDF: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [id: string, count: int]
scala> unmatchDF.show()
+---+-----+
| id|count|
+---+-----+
| b| 2|
| a| 1|
| c| 3|
+---+-----+
在PySpark中,您可以使用减功能来实现相同的目的。