如何仅找出数据在scala中具有特定值的列名
我有一个DF数据帧,它有以下值如何仅找出数据在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
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