如何使用spark中的if语句删除RDD的列(使用scala)



假设我有一个文本文件,其中每个条目都有几百个数据点。我想去掉任何有问号的列——使用drop函数并将其挑选出来似乎很乏味;有更快的路吗?

类似dataframe.map( x => ifcontainsquestionmarkdropcolumn(x))的东西?

每列的问号数可以用"sum";函数,并且可以删除数字为非零的列:

val df = Seq(("nomark", "question?mark"))
.toDF("expected", "dropped")
val questionCountColumns = df
.columns
.map(c => sum(when(col(c).contains("?"), 1).otherwise(0)).alias(c))
val questionCountRow = df.select(questionCountColumns: _*).first()
val columnsToDrop = df
.columns
.filter(c => questionCountRow.getAs[Long](c) > 0)
val result = df.drop(columnsToDrop: _*)

结果是:

+--------+
|expected|
+--------+
|nomark  |
+--------+

最新更新