【问题标题】:How to find out only those column names where data is having particular value in scala如何仅找出数据在scala中具有特定值的那些列名
【发布时间】:2021-05-26 22:23:01
【问题描述】:

我有一个具有以下值的 DF 数据框

Email   NAME       DESIGNATION
MATCHED MISMATCHED MISMATCHED
MATCHED MISMATCHED MATCHED

我能够使用 DF 数据框中的列 val comparecols = Df.columns

我想找出那些具有 MISMATCHED 值的列。在我的示例名称和名称中。 由于我的数据框不一致,我不确定如何同时使用地图和过滤器

下面我试过了

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

但它给我结果行明智,即它一次检查行并给出所有列。

但是我想逐列检查。

【问题讨论】:

    标签: scala dataframe apache-spark


    【解决方案1】:

    您可以进行有条件的求和/计数:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多