我的数据框中有 100 多列。在 100 列中,90 列是指标列。我需要找到至少有一个指标不为 0 的行。我正在过滤诸如 metric1 <> 0 或 metric2 <> 0 之类的内容。有什么技巧可以更好地处理这种情况吗?
最佳答案
这里有一些更多的选项,所有这些都假定目标列具有诸如 metric1、metric2、metric3 ... metricN
之类的名称。
首先让我们确定目标列:
val targetColumns = df.columns.filter(_.matches("metric\d+"))
选项 1: 使用 greatest 过滤这将返回具有较大值的列:
import org.apache.spark.sql.functions.greatest
df.filter(greatest(targetColumns:_*) != 0)
选项 2:在列之间应用按位或:
import org.apache.spark.sql.functions.col
val bitwiseORCols = targetColumns.map(col).reduce(_ bitwiseOR _)
df.filter(bitwiseORCols != 0)
关于scala - Spark scala - 在 df 中查找非零行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62377877/