我需要使用以下标准过滤数据框。
我有 2 列 4Wheel(斯巴鲁、丰田、通用、空/空)和 2Wheel(雅马哈、哈雷、印度、空/空)。
我必须在 4Wheel 上过滤值(斯巴鲁、丰田),如果 4Wheel 包含空/空值,则在 2Wheel 上过滤值(雅马哈、哈雷)
我在不同的示例中找不到这种类型的过滤。我是 spark/scala 的新手,所以没有足够的想法来实现它。
谢谢,巴伦。
我需要使用以下标准过滤数据框。
我有 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|
+---+------+------+