Scala 包含模式的列上的Dataframe GroupBy聚合
我有一个数据帧,列为c1,c2。我想把它们分组在c1上,然后选择c2,这样c2值包含一个模式,如果所有c2都不包含模式,那么返回任何一个 示例df:Scala 包含模式的列上的Dataframe GroupBy聚合,scala,apache-spark,dataframe,Scala,Apache Spark,Dataframe,我有一个数据帧,列为c1,c2。我想把它们分组在c1上,然后选择c2,这样c2值包含一个模式,如果所有c2都不包含模式,那么返回任何一个 示例df: c1 c2 1 ai_za 1 ah_px 1 ag_po 1 af_io 1 ae_aa 1 ad_iq 1 ac_on 1 ab_eh 1 aa_bs 2 aa_ab 2 aa_ac 如果c2中需要的模式是“\u io” 预期结果: c1 c2 1 af_io 2 aa_ab 返回1个
c1 c2
1 ai_za
1 ah_px
1 ag_po
1 af_io
1 ae_aa
1 ad_iq
1 ac_on
1 ab_eh
1 aa_bs
2 aa_ab
2 aa_ac
如果c2中需要的模式是“\u io”
预期结果:
c1 c2
1 af_io
2 aa_ab
返回1个af_io,因为它包含“_io”模式
2 aa_ab以随机方式返回,因为第2组中没有人包含模式“_io”
如何使用spark dataframe/dataset api获取此信息?如果没有匹配项,则选择哪一行无关紧要,您可以尝试:
df.groupByKey(_.getAs[Int]("c1")).
reduceGroups((x, y) => if(x.getAs[String]("c2").matches(".*_io")) x else y).
toDF("key", "value").
select("value.c1", "value.c2").show
+---+-----+
| c1| c2|
+---+-----+
| 1|af_io|
| 2|aa_ac|
+---+-----+
注意:这将拾取与模式匹配的第一行,如果不匹配,则拾取组中的最后一行。如果有多行包含_io模式,是否要拾取所有行?如果有多行包含_io模式,则拾取第一行非常感谢@Psidom