我有一个Dataframedf和列a,b,c,d,e,f,g。我有一个scala列表l1,它是list[any]=list(a,b,c)如何在df上执行group by操作并使用列表l1查找重复项(如果有)另外,如何找出Dataframe是否对列表l1中提到的列具有nulls/blanks/emptyvaluee、 g.需要使用df.groupby(l1),因为l1可能会随时间而变化
mrphzbgm1#
// 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 | // +----+----+----+-----+
1条答案
按热度按时间mrphzbgm1#