2017-10-25 8 views
-2

私が唯一のフィールドfield1持っているとき、私はpysparkのデータフレームのグループのデータにしたい、と次のように私はそれを実行します。2つのフィールドでデータをグループ化する方法は?

groups = df.select("field1").distinct().flatMap(lambda x: x).collect() 
dfs = [df.where(df["field1"] == g) for g in groups] 

を私はNデータフレームの、Nはgroupsのサイズであるのリストdfsを取得します。今私はデータをグループ化するためにfield1field2を使いたいと思っています。

どうすればいいですか?

また、List of DataFrameを使用するのがよいアプローチであるかどうかを知りたいと思いますか?私はその後 forループを使用します:for d in dfs。しかし、このforループは本当に遅いです。

+0

あなたは正確に何をしたいのですが、groupBy( "field1"、 "field2")は機能しますか? – Fabich

+0

データフレームを投稿する可能性はありますか? –

答えて

1

2つの特定の列でグループ化する場合は、groupByを使用してください。 2 columnss使った簡単な例:groupByを実行した後

val df2 = df.groupBy('col1', 'col2') 

は、通常使用可能なオプションについては、hereを参照してください、aggで集計関数を使用する必要があります。


何が必要なら、選択肢はそれらをループになるとgroupByを実行することになり、2列のすべての組み合わせのリストです。しかし、groupByは、遅くて非効率的であることで有名です。集計する必要があるものに応じて、reduceByKeyまたはcombineByKeyを調べることをお勧めします。

関連する問題