2016-08-24 234 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如果这回答您的问题,那么请您将其标记为已回答?这将从开放问题列表中删除它,并给我一些积分。 –