如何仅找出数据在scala中具有特定值的列名

如何仅找出数据在scala中具有特定值的列名,scala,dataframe,apache-spark,Scala,Dataframe,Apache Spark,我有一个DF数据帧,它有以下值 Email NAME DESIGNATION MATCHED MISMATCHED MISMATCHED MATCHED MISMATCHED MATCHED 我能够使用 val comparecols=Df.columns 我想找出那些值不匹配的列。这里是我的名字和名称示例。 由于我的数据帧不一致,我不确定如何将map和filter一起使用 我在下面试过 for (name <- comparecols){ df =df.filter(s

我有一个DF数据帧,它有以下值

Email   NAME       DESIGNATION
MATCHED MISMATCHED MISMATCHED
MATCHED MISMATCHED MATCHED
我能够使用 val comparecols=Df.columns

我想找出那些值不匹配的列。这里是我的名字和名称示例。 由于我的数据帧不一致,我不确定如何将map和filter一起使用

我在下面试过

for (name <- comparecols){
df =df.filter(s"$name ='MATCHED'") 

对于(name您可以进行条件求和/计数:

val df2 = df.select(
    df.columns.map(
        c => sum(when(col(c) === "MISMATCHED", 1).otherwise(0)).as(c)
    ): _*
)

df2.show
+-----+----+-----------+
|Email|NAME|DESIGNATION|
+-----+----+-----------+
|    0|   2|          1|
+-----+----+-----------+
如果要获取列名,可以执行以下操作

val colnames = df2.select(
    arrays_zip(array(df.columns.map(lit):_*), array(df.columns.map(col):_*)).as("c")
).selectExpr("inline(c) as (col, val)").filter("val != 0").select("col").rdd.map(_.getString(0)).collect