【发布时间】:2020-06-10 14:04:46
【问题描述】:
考虑一个 pyspark 数据框。我想按列汇总整个数据框,并为每一行附加结果。
+-----+----------+-----------+
|index| col1| col2 |
+-----+----------+-----------+
| 0.0|0.58734024|0.085703015|
| 1.0|0.67304325| 0.17850411|
预期结果
+-----+----------+-----------+-----------+-----------+-----------+-----------+
|index| col1| col2 | col1_min | col1_mean |col2_min | col2_mean
+-----+----------+-----------+-----------+-----------+-----------+-----------+
| 0.0|0.58734024|0.085703015| -5 | 2.3 | -2 | 1.4 |
| 1.0|0.67304325| 0.17850411| -5 | 2.3 | -2 | 1.4 |
据我所知,我需要将整个数据框作为 Window 的 Window 函数,以保留每一行的结果(而不是,例如,分别进行统计,然后再加入以复制每一行)
我的问题是:
- 如何编写没有任何分区和排序的窗口
我知道有分区和顺序的标准窗口,但不是将所有内容都视为 1 个单独分区的窗口
w = Window.partitionBy("col1", "col2").orderBy(desc("col1"))
df = df.withColumn("col1_mean", mean("col1").over(w)))
如何编写一个将所有内容都作为一个分区的窗口?
- 为所有列动态写入的任何方式。
假设我有500列,重复写看起来不太好。
df = df.withColumn("col1_mean", mean("col1").over(w))).withColumn("col1_min", min("col2").over(w)).withColumn("col2_mean", mean().over(w)).....
假设我希望每列有多个统计信息,因此每个colx 都会生成colx_min, colx_max, colx_mean。
【问题讨论】:
标签: dataframe apache-spark pyspark apache-spark-sql window-functions