2017-02-21 68 views
0

我有一個數據幀,列c1,c2。我想他們對組C1和要挑C2,使得C2的值包含一個模式,如果所有C2不包含模式返回任何Dataframe GroupBy在包含模式的列上聚合

例如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需要的模式'_io'

預期的結果:

c1 c2 
1 af_io 
2 aa_ab 

1 af_io返回,因爲它包含 '_IO' 模式

2 aa_ab返回爲隨機的,因爲沒有人在第2組中包含模式「_IO」

如何得到使用火花數據幀/數據集API?

+0

如果有多個行包含'_io'模式,您是否想要選取所有行? – Psidom

+0

如果有多個包含'_io'模式,請選第一行 –

回答

1

如果不要緊挑哪一行,如果沒有匹配,你可以嘗試:

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| 
+---+-----+ 

注:此挑選了小組賽的模式,並挑選最後一行的第一行如果沒有匹配。

+1

非常感謝@Psidom –