【问题标题】:Group By on a dataframe在数据帧上分组
【发布时间】:2020-12-02 20:26:05
【问题描述】:

我有一个数据框 df,其中包含 a、b、c、d、e、f、g 列。

我有一个 scala 列表 L1,它是 List[Any] = List(a,b,c)

如何对 DF 执行分组操作并使用列表 L1 查找重复项(如果有)

还有如何找出数据框是否有列表 L1 中提到的列的空值/空白/空值

例如df.groupby(l1) 需要使用,因为 l1 可能会不时变化

【问题讨论】:

    标签: scala dataframe apache-spark apache-spark-sql scala-collections


    【解决方案1】:
    // Null
    case class Source(
                       a: Option[String],
                       b: Option[String],
                       c: Option[String],
                       d: Option[String],
                       e: Option[String],
                       f: Option[String],
                       g: Option[String] )
    
    val l = List("a", "b", "c")
    
    
    val sourceDF = Seq(
      Source(None, Some("b1"),  Some("c1"), Some("d1"), Some("e1"), Some("f1"), Some("g1")),
      Source(Some("a2"), None,  Some("c2"), Some("d2"), Some("e2"), Some("f2"), Some("g2")),
      Source(Some("a3"), Some("b3"),  None, Some("d3"), Some("e3"), Some("f3"), Some("g3")),
      Source(Some("a4"), Some("b4"),  Some("c4"), Some("d4"), Some("e4"), Some("f4"), Some("g4"))
    ).toDF()
    
    sourceDF.show(false)
    //  +----+----+----+---+---+---+---+
    //  |a   |b   |c   |d  |e  |f  |g  |
    //  +----+----+----+---+---+---+---+
    //  |null|b1  |c1  |d1 |e1 |f1 |g1 |
    //  |a2  |null|c2  |d2 |e2 |f2 |g2 |
    //  |a3  |b3  |null|d3 |e3 |f3 |g3 |
    //  |a4  |b4  |c4  |d4 |e4 |f4 |g4 |
    //  +----+----+----+---+---+---+---+
    
    
    val f1 = l.map(i => s" $i is null").mkString(" or ")
    sourceDF.where(f1).show(false)
    
    //  +----+----+----+---+---+---+---+
    //  |a   |b   |c   |d  |e  |f  |g  |
    //  +----+----+----+---+---+---+---+
    //  |null|b1  |c1  |d1 |e1 |f1 |g1 |
    //  |a2  |null|c2  |d2 |e2 |f2 |g2 |
    //  |a3  |b3  |null|d3 |e3 |f3 |g3 |
    //  +----+----+----+---+---+---+---+
    
    // groupBy
    
    val gbDF = sourceDF.groupBy(l.head, l.tail:_*).count()
    gbDF.show(false)
    //  +----+----+----+-----+
    //  |a   |b   |c   |count|
    //  +----+----+----+-----+
    //  |a2  |null|c2  |1    |
    //  |a4  |b4  |c4  |1    |
    //  |a3  |b3  |null|1    |
    //  |null|b1  |c1  |1    |
    //  +----+----+----+-----+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-17
      • 2017-08-29
      • 2020-06-10
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多