2017-06-06 24 views
2

Spark-SQLバージョン1.6では、DataFrameを使用して、特定の列に対して、現在の行と次の行の合計をすべての行について計算する方法はありますか?例えば次の行で現在の行を計算するにはどうすればよいですか?

、私は

Age 
12 
23 
31 
67 

私はそれは、「次を持っていないので、最後の行がドロップされ、次の出力

Sum 
35 
54 
98 

したいような、一つの列を持つテーブルを持っている場合行 "に追加されます。

今私はテーブルのランキングを決めてそれ自身と結合しています。ここではrankrank+1です。

これを行うより良い方法はありますか? Window機能でこれを行うことはできますか?

答えて

1

はい、間違いなくrowsBetween機能を使用してWindow機能を使用できます。以下の例ではgrouping目的のためにperson列を使用しました。

import sqlContext.implicits._ 
import org.apache.spark.sql.functions._ 

val dataframe = Seq(
    ("A",12), 
    ("A",23), 
    ("A",31), 
    ("A",67) 
).toDF("person", "Age") 

val windowSpec = Window.partitionBy("person").orderBy("Age").rowsBetween(0, 1) 
val newDF = dataframe.withColumn("sum", sum(dataframe("Age")) over(windowSpec)) 
    newDF.filter(!(newDF("Age") === newDF("sum"))).show 
+0

代わりに 'Window.currentRow'を使用してください。 –

+0

ありがとうございます。 [この質問](https://stackoverflow.com/q/44392754/416300)もご覧ください。 – summerbulb

関連する問題