2017-05-18 6 views
1

私は行が二つの文字列、ユーザID AとユーザIDのBで構成されてデータフレームを持っている:行の頻度を減らすには?

1234, 3456 
1234, 5678 
3456, 1234 
1234, 3456 

私のような何かにそれを変換したい:

1234: (3456, 2), (5678, 1) 
3456: (1234, 1) 

一意の列Aあたりだから、1行値、および一意の列Aの値を持つ行に各一意の列Bの値が何回現れたかのカウント。

私は列Aでただ一つのユーザIDにダウンフィルタ処理した場合、私はお互いのユーザーIDは、とB列に登場する頻度を得ることができます知っている:

df.rdd.map(lambda row: (row['columnB'], 1)).reduceByKey(lambda x,y: x+y) 

しかし、スパークN00Bとして、私は」することができますすべてのユーザーのためにそれを行う方法を理解していない。

答えて

3

from pyspark.sql.functions immport * 

cnts = df.groupBy("columnA", "columnB").count() 

collect_listを集約するようにしてください:

cnts.groupBy("columnA").agg(collect_list(struct(col("columnA"), col("count")))) 
関連する問題