2016-06-24 8 views
-1

の値を重複している行を削除:pyspark:私は、次のデータフレーム持って与えられたフィールド

field_A | field_B | field_C | field_D 
    cat | 12  | black | 11 
    dog | 128  | white | 19 
    dog | 35  | yellow | 20 
    dog | 21  | brown | 4 
bird | 10  | blue | 7 
    cow | 99  | brown | 34 

はfield_Aに値を重複している行をフィルタリングすることが可能です。つまり、最終的なデータフレームは、

field_A | field_B | field_C | field_D 
    cat | 12  | black | 11 
bird | 10  | blue | 7 
    cow | 99  | brown | 34 

です。これはpysparkで可能ですか?ありがとうございました!

答えて

3

作成データ

rdd = sc.parallelize([(0,1), (0,10), (0,20), (1,2), (2,1), (3,5), (3,18), (4,15), (5,18)]) 
t = sqlContext.createDataFrame(rdd, ["id", "score"]) 
t.collect() 

[ロウ(ID = 0、スコア= 1)、 行(ID = 0、スコア= 10)、 行(ID = 0、スコア= 20)

(id = 3、score = 18)、 行(id = 3、スコア= 2)、 行(id = 1、score = 2)、 行(id = 2、score = 1)、 行行(id = 4、スコア= 15)、 行(id = 5、スコア= 18)]

は、与えられたID

idCounts = t.groupBy('id').count() 

持つ行の数が元のデータ・フレームに

out = t.join(idCounts,'id','left_outer').filter('count = 1').select(['id', 'score']) 
out.collect 

[ロウ(ID = 1、スコア= 2)、 行(ID idCountsに参加取得します= 2、スコア= 1)、 行(ID = 4、スコア= 15)、 行(ID = 5、スコア= 18)]

+0

確かでき、これは= t.join(idCountsを 'と、 'id'、 'left_outer')。withColumnRe名前付き( 'count'、 'newNameOfColumn') 'です。私の答えのselect文は、id/scoreだけを保持するために使われました。フィルターステートメントがなければ、元のDF(重複を含む)のすべての行を持つことに注意してください。 – David

関連する問題