Spark DataFrame でグループ化するときに他の列を保持する
DataFrame の groupby 操作を実行すると、グループ化された列のみを受信するという問題がよく発生します。列と集計値。元の DataFrame の他の列を保持する必要がある場合、これは不便な場合があります。
たとえば、次の groupby を考えてみましょう:
df.groupBy(df("age")).agg(Map("id" -> "count"))
これは、「年齢」のみを含む DataFrame を返します。および「count(id)」列。ただし、元の DataFrame に「name」およびその他の列が存在する場合は、それらを結果に含めることができます。
標準 SQL では、これは次のクエリを使用して実現できます:
select name, age, count(id) from df group by age
Spark でこの動作を再現するには、集計結果を元のテーブルと結合します。結合のキー列は、groupby 列と同じである必要があります。
Spark SQL を使用した例を次に示します。
val groupedDf = df.groupBy($"age").agg(count($"id").as("count")) val joinedDf = df.join(groupedDf, Seq("age"), "left")
joinedDf には、すべての元の列と集計された "count" 列。
別のアプローチは、first や last などの任意の集計を使用して追加の列を含めることです。例:
val groupedDf = df.groupBy($"age").agg(first($"name").as("name"), count($"id").as("count"))
これにより、「name」列が集約された DataFrame に確実に保持されます。
これらのメソッドを使用すると、グループ化中に他の列を取得できますが、注意することが重要です。このようなクエリは一般に明確に定義されておらず、システムごとに異なる動作を示す可能性があります。
以上がSpark DataFrame でグループ化するときに他の列を保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。