我已经尝试实施了大约一个月。 仅使用其他堆栈溢出问题中的一些示例数据。
INFO[0000] Run Client, listening on port 8080
2019/09/30 15:41:52 Requesting image to server
2019/09/30 15:41:52 Pixels: &{[164 164 164 164 164 164 164 164 164 164 164 164 164 164 164
164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 1
64 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164
164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 1
64 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164
164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 1
64 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164
164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 1
64 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164
164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 1
64 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164
164 164 164 164 164 164 164 164 164 164 164 164 164 164 164 164] [128 128 128 128 128 128
128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 1
28 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 128 128 128 128 128 128 128 128] [128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128] 16 8 YCbCrSubsampleRatio420 (0,0)-(1,1)}
我们如何使用它来计算每个月的年初至今销售总额。
FinancialYearStart MonthOfFinancialYear SalesTotal
2015 1 10
2015 2 10
2015 5 10
2015 6 50
2016 1 10
2016 3 20
2016 2 30
2017 6 70
2017 7 80
更具体地说,我们如何通过分组或使用开窗函数使用一组计算这些指标。
例如:
FinancialYearStart MonthOfFinancialYear SalesTotal YTDTotal
2015 1 10 10
2015 2 10 20
2015 5 10 30
2015 6 50 50
2016 1 10 60
2016 3 20 80
2016 2 30 110
2017 6 70 70
2017 7 80 150
会给:
Year Month Customer TotalMonthlySales
2015 1 Dog 10
2015 2 Dog 10
2015 3 Cat 20
2015 4 Dog 30
2015 5 Cat 10
2015 7 Cat 20
2015 7 Dog 10
2016 1 Dog 40
2016 2 Dog 20
2016 3 Cat 70
2016 4 Dog 30
2016 5 Cat 10
2016 6 Cat 20
2016 7 Dog 10
现在,我正在使用滚动窗口函数通过以下方法计算过去4周13周的时间。
Year Month Customer TotalMonthlySales YTDSales
2015 1 Dog 10 10
2015 2 Dog 10 20
2015 3 Cat 20 20
2015 4 Dog 30 50
2015 5 Cat 10 30
2015 7 Cat 20 40
2015 7 Dog 10 60
2016 1 Dog 40 40
2016 2 Dog 20 60
2016 3 Cat 70 70
2016 4 Dog 30 90
2016 5 Cat 10 80
2016 6 Cat 20 100
2016 7 Dog 10 100
答案 0 :(得分:0)
您可以使用window函数在Spark-Sql中实现
df.show()
+----+-----+--------+-----------------+
|Year|Month|Customer|TotalMonthlySales|
+----+-----+--------+-----------------+
|2015| 1| Dog| 10|
|2015| 2| Dog| 10|
|2015| 3| Cat| 20|
|2015| 4| Dog| 30|
|2015| 5| Cat| 10|
|2015| 7| Cat| 20|
|2015| 7| Dog| 10|
|2016| 1| Dog| 40|
|2016| 2| Dog| 20|
|2016| 3| Cat| 70|
|2016| 4| Dog| 30|
|2016| 5| Cat| 10|
|2016| 6| Cat| 20|
|2016| 7| Dog| 10|
+----+-----+--------+-----------------+
df.registerTempTable("test")
sql("select *, sum(TotalMonthlySales) over(partition by year,Customer order by month) tt from test ").orderBy("year","month").show()
+----+-----+--------+-----------------+---+
|Year|Month|Customer|TotalMonthlySales| tt|
+----+-----+--------+-----------------+---+
|2015| 1| Dog| 10| 10|
|2015| 2| Dog| 10| 20|
|2015| 3| Cat| 20| 20|
|2015| 4| Dog| 30| 50|
|2015| 5| Cat| 10| 30|
|2015| 7| Cat| 20| 50|
|2015| 7| Dog| 10| 60|
|2016| 1| Dog| 40| 40|
|2016| 2| Dog| 20| 60|
|2016| 3| Cat| 70| 70|
|2016| 4| Dog| 30| 90|
|2016| 5| Cat| 10| 80|
|2016| 6| Cat| 20|100|
|2016| 7| Dog| 10|100|
+----+-----+--------+-----------------+---+
希望这对您有所帮助。请让我知道您是否有相同查询