apache-spark - Spark Dataframe 中的过滤操作
问题描述
我有一个 Spark 数据框,我想根据特定列的匹配值从中选择几行/记录。我想我可以在地图转换中使用过滤器操作或选择操作来做到这一点。
但是,我想针对那些在应用过滤器时未选择的行/记录更新状态列。
在应用过滤器操作时,我将返回一个包含匹配记录的新数据框。
那么,如何知道和更新未被选中的行的列值呢?
解决方案
在应用过滤器操作时,您将获得匹配记录的新数据框。
然后,您可以在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 中,您可以使用减法函数实现相同的目的。
推荐阅读
- node.js - 在我得到一个 set-cookie 作为响应后,不会在请求中保存和传输
- google-apps-script - onEdit() 将行移动到其他工作表有时会将行移动到目标行下方
- c++ - std::make_shared 和 std::make_unique 有“nothrow”版本吗?
- python - 如何在 ChainMap 中打印某个元素
- android - 更改活动的语言也反映在以前创建的活动中
- c# - Asp.Net MVC 5 FileResult 总是使用 ANSI 编码下载文件
- c# - 循环获取对象C#中的重复项
- java - 使用 JDBC 将大文件从 postgres 数据库流式传输到文件系统
- mysql - 如何在续集,节点js中的where条件下使用like
- android - 如何在 >= Android O 中设置通知通道默认值