2016-08-24 233 views
0

我有一個基於數字具有唯一以及重複記錄的日期幀。現在我想將數據幀分成兩個數據幀。在第一個數據幀中,我只需要複製唯一的行,而在第二個數據幀中我想要所有重複的行。例如將數據幀拆分爲兩個DataFrame

 id name  number 
    1 Shan  101 
    2 Shan  101 
    3 John  102 
    4 Michel 103 

兩個分裂數據框應該像

獨特

 id name number 
     3  John 102 
     4  Michel 103 

反覆

 id name  number 
     1 Shan  101 
     2 Shan  101 
+0

我都試過,但它返回對數計數 df.groupBy( 「數字」)。COUNT()。選擇( 「*」)。其中( 「計數> 1」) 我需要所有重複行與所有專欄 –

回答

0

你試過很可能讓你有解決方案。

你的數據看起來像這樣

val df = sc.parallelize(Array(
    (1, "Shan",  101), 
    (2, "Shan", 101), 
    (3, "John", 102), 
    (4, "Michel", 103) 
    )).toDF("id","name","number") 

那你自己認爲分組和計數。如果你不喜歡這樣

val repeatedNames = df.groupBy("name").count.where(col("count")>1).withColumnRenamed("name","repeated").drop("count") 

,那麼你可以實際做這樣的事情以後得到所有的方式:

val repeated = df.join(repeatedNames, repeatedNames("repeated")===df("name")).drop("repeated") 

val distinct = df.except(repeated) 

repeated show 
+---+----+------+ 
| id|name|number| 
+---+----+------+ 
| 1|Shan| 101| 
| 2|Shan| 101| 
+---+----+------+ 

distinct show 
+---+------+------+ 
| id| name|number| 
+---+------+------+ 
| 4|Michel| 103| 
| 3| John| 102| 
+---+------+------+ 

希望它能幫助。

+0

你搖滾..... !!!!!! –

+0

@AtifShahzad如果這回答您的問題,那麼請您將其標記爲已回答?這將從開放問題列表中刪除它,並給我一些積分。 –