2016-10-03 27 views
0

次のDataFrameがあるとします。Spark SQLのキーが同じで、合計値が加算される行を合計します。

+----+-----+ 
|lang|count| 
+----+-----+ 
| en| 4| 
| en| 5| 
| de| 2| 
| en| 2| 
| nl| 4| 
| nl| 5| 
+----+-----+ 

どのように私は(行の量を低下させることなく、このように)一意の各言語の「カウント」の値を合計し、新しい列としてこの値を追加しますか?データフレームがDStreammap操作により構築されている

+----+-----+----------------+ 
|lang|count|totalCountInLang| 
+----+-----+----------------+ 
| en| 4|    11| 
| en| 5|    11| 
| de| 2|    2| 
| en| 2|    11| 
| nl| 4|    9| 
| nl| 5|    9| 
+----+-----+----------------+ 

:私の例では

、これがもたらすであろう。

これを達成するための最良の方法は何ですか? DataFramesを使うよりも効率的な方法がありますか?

ありがとうございます!

答えて

3

あなたは、次のいずれかを使用できます。

val df = Seq(
    ("en", 4), ("en", 5), ("de", 2), 
    ("en", 2), ("nl", 4), ("nl", 5) 
).toDF("lang", "count") 

val w = Window.partitionBy("lang").rowsBetween(Long.MinValue, Long.MaxValue) 
df.withColumn("totalCountInLang", sum("count").over(w)) 
  • 集約と参加:ウィンドウの上に

    • 合計を小グループで

      df.join(df.groupBy("lang").sum(), Seq("lang")) 
      

    以前のソリューションはslighを動作する必要がありますもっと良いです。より大きなものについては、後者のものを、場合によっては放送機能と組み合わせて、通常は提供される。

  • 関連する問題