scala - Spark scala - 在 df 中查找非零行

标签 scala apache-spark

我的数据框中有 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/

相关文章:

scala - Spark 中的 takeSample() 函数

scala - 子类型中的压倒性差异

apache-spark - Apache Spark Codegen Stage 增长超过 64 KB

memory - spark.python.worker.memory 与 spark.executor.memory 有何关系?

scala - 基本 Scalaz 状态问题

scala - 在小于全局范围内关闭 Scala lint 警告?

scala - 在 scala 2.8 中使用 scala.collection.JavaConversions._ 时在 scala 和 java 集合之间自动转换

java - 如何将 Deeplearning4j word2vec 与 Spark 结合起来,将单词转换为其 vector 表示?

apache-spark - 有关 Spark rdd.saveAsObjectFile 文件格式的文档

python - 基于时间戳值流式传输和处理数据(使用 Kafka 和 Spark Streaming)