【发布时间】:2020-06-18 06:50:23
【问题描述】:
我想知道如何根据 Spark 中的未知列进行动态过滤。
例如,数据框如下:
+-------+-------+-------+-------+-------+-------+
| colA | colB | colC | colD | colE | colF |
+-------+-------+-------+-------+-------+-------+
| Red | Red | Red | Red | Red | Red |
| Red | Red | Red | Red | Red | Red |
| Red | Blue | Red | Red | Red | Red |
| Red | Red | Red | Red | Red | Red |
| Red | Red | Red | Red | Blue | Red |
| Red | Red | White | Red | Red | Red |
+-------+-------+-------+-------+-------+-------+
这些列只能在运行时知道,这意味着它可以有 colG、H .. 我需要检查整个列的值是否为红色,然后得到一个计数,在上述情况下为 3,因为 colA、colD 和 ColF 列都是红色的。
我正在做的事情如下所示,而且速度很慢..
val allColumns = df.columns
df.foldLeft(allColumns) {
(df, column) =>
val tmpDf = df.filter(df(column) === "Red")
if (tmpDf.rdd.isEmpty) {
count += 1
}
df
}
我想知道是否有更好的方法。非常感谢!
【问题讨论】:
标签: scala apache-spark