2016-08-24 7 views
0

私は、数字に基づいて一意のレコードと繰り返しレコードを持つ日付フレームを持っています。今私は2つのデータフレームにデータフレームを分割したい。最初のデータフレームでは、私は一意の行だけをコピーする必要があり、2番目のデータフレームではすべての繰り返し行が必要です。例データフレームを2つのDataFrameに分割する

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

のために2つの分割さデータフレームは

のようなユニークな

 id name number 
     3  John 102 
     4  Michel 103 

繰り返し

 id name  number 
     1 Shan  101 
     2 Shan  101 
+0

私はこれを試してみましたが、それは数字 df.groupBy(「番号」)に対して、カウントを返します。(カウント)。(「*」)を選択します。私はすべての繰り返しの行を必要な場所(「> 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これがあなたの質問に答えるなら、答えとしてマークしてください。これは未解決の質問のリストからそれを削除するだけでなく、私にクレジットのいくつかのポイントを与えます。 –

関連する問題