scala - Scala Spark数据帧过滤器使用基于可用值的多列
问题描述
我需要使用以下标准过滤数据框。
我有 2 列 4Wheel(斯巴鲁、丰田、通用、空/空)和 2Wheel(雅马哈、哈雷、印度、空/空)。
我必须在 4Wheel 上过滤值(斯巴鲁、丰田),如果 4Wheel 包含空/空值,则在 2Wheel 上过滤值(雅马哈、哈雷)
我在不同的示例中找不到这种类型的过滤。我是 spark/scala 的新手,所以没有足够的想法来实现它。
谢谢,巴伦。
解决方案
您可以使用 spark SQL 内置函数when
来检查列是否为空或空,并进行相应的过滤:
import org.apache.spark.sql.functions.{col, when}
dataframe.filter(when(col("4Wheel").isNull || col("4Wheel").equalTo(""),
col("2Wheel").isin("Yamaha", "Harley")
).otherwise(
col("4Wheel").isin("Subaru", "Toyota")
))
因此,如果您有以下输入:
+---+------+------+
|id |4Wheel|2Wheel|
+---+------+------+
|1 |Toyota|null |
|2 |Subaru|null |
|3 |GM |null |
|4 |null |Yamaha|
|5 | |Yamaha|
|6 |null |Harley|
|7 | |Harley|
|8 |null |Indian|
|9 | |Indian|
|10 |null |null |
+---+------+------+
您会得到以下过滤后的输出:
+---+------+------+
|id |4Wheel|2Wheel|
+---+------+------+
|1 |Toyota|null |
|2 |Subaru|null |
|4 |null |Yamaha|
|5 | |Yamaha|
|6 |null |Harley|
|7 | |Harley|
+---+------+------+
推荐阅读
- django - Django DRF:如何连接表并调用函数?
- django - Django + uWSGI + Nginx 立即导致上游过早关闭连接
- rust - 我在哪里可以找到 Rust 编程语言书中提到的源代码(.rs 文件)?
- r - R Highcharter:具有多个系列的多级钻取
- sql - 将日期序列调用到存储过程的最佳方法
- scala - 而不是使用两种看起来完全相同的方法,我如何提取泛型参数(一个是 List[T],另一个是泛型 T)
- angular - 如何以角度编写我的函数的文档
- reporting-services - 显示所有员工,即使为零或为空
- google-sheets - 我想在 Google 电子表格中导入实时足球比分
- javascript - 如何获取布尔值,如果单击元素 id - Angular