获取pyspark中聚合函数的所有行

时间:2017-03-23 18:00:57

标签: sql apache-spark pyspark spark-dataframe pyspark-sql

我是pyspark的新手并试图从聚合函数的结果中显示所有行,以便在其他计算中使用这些列。

我有2个数据帧

数量

+ ---- + ----- + ----- + ---- +

| ID |尺寸|

+ ---- + -----

| 1 | 3 |

| 1 | 3 |

| 1 | 3 |

| 2 | 6 |

| 2 | 6 |

+ ---- + -----

价格
+ ---- + ----- + ----- + ---- +

| ID | perf |尺寸|日期|

+ ---- + ----- + ----- + ---- +

| 1 | 7.5 | 3 | 2017-01-03 |

| 1 | 39 | 3 | 2012-01-06 |

| 1 | 12 | 3 | 2009-04-01 |

| 1 | 28 | 3 | 2011-11-08 |

| 1 | 9 | 3 | 2012-09-12 |

| 1 | 15 | 3 | 2017-07-03 |

| 1 | 10 | 3 | 2017-05-03 |

| 1 | 33 | 3 | 2012-03-08 |

| 2 | 53 | 6 | 2012-03-08 |

+ ---- + ----- + ----- + ---- +

我已经能够在2个数据帧上执行连接,并且还按日期排序,以获取每个ID的开始和结束日期。

这就是我所做的

dJoin = quantity.join(price, (quantity.id==price.id) & (quantity.size==price.size)). select(quantity.id, quantity.size, price.perf, price.date)  

part_asc = Window.partitionBy(dJoin.id).orderBy((dJoin.date).desc())
part_desc = Window.partitionBy(dJoin.id).orderBy((dJoin.date).asc())  

add_cols = dJoin.withColumn("rnASC", row_number().over(part_asc)) \
                 .withColumn("rnDESC", row_number().over(part_desc))

以上代码给出了以下内容:

+ ---- + ----- + ----- + ---- +

| ID | perf |尺寸|日期| rnASC | rnDESC

+ ---- + ----- + ----- + ---- + ------- + ----

| 1 | 7.5 | 3 | 2017-01-03 | 1 | 8

| 1 | 39 | 3 | 2012-01-06 | 2 | 7

| 1 | 12 | 3 | 2009-04-01 | 3 | 6

| 1 | 28 | 3 | 2011-11-08 | 4 | 5

| 1 | 9 | 3 | 2012-09-12 | 5 | 4

| 1 | 15 | 3 | 2017-07-03 | 6 | 3

| 1 | 10 | 3 | 2017-05-03 | 7 | 2

| 1 | 33 | 3 | 2012-03-08 | 8 | 1

| 2 | 53 | 6 | 2012-03-08 | 1 | 1

+ ---- + ----- + ----- + ---- +

rnASC rnDESC 都为1时,我试图获取 perf 列,然后执行两者中的不同操作。

目前,我可以显示两个值均为1但无法访问性能

add_cols.groupBy(add_cols.id).agg((min('rnASC')), min('rnDESC')).show()  

上面只显示了 ID ,但我认为我需要与 id 相对应的性能以便做差分计算。

这是为了你的帮助!

0 个答案:

没有答案