【发布时间】:2020-04-17 18:17:23
【问题描述】:
我是一名进入 pyspark 世界的 R 程序员,已经掌握了很多基本技巧,但我仍在努力解决的问题是我会做的事情 apply 或基本 for 循环。
在这种情况下,我试图计算一个 ID 的“anti-groupby”。基本上,这个想法是查看该 ID 的总体,然后查看非该 ID 的总体,并将这两个值放在同一行上。使用 groupby 获取该 ID 的人口很容易,然后将其加入以 new_id 作为唯一列的数据集。
这就是我在 R 中的做法:
anti_group <- function(id){
tr <- sum(subset(df1, new_id!=id)$total_1)
to <- sum(subset(df1, new_id!=id)$total_2)
54 * tr / to
}
test$other.RP54 <- sapply(test$new_id, anti_group )
我将如何在 pyspark 中做到这一点?
谢谢!
编辑:
#df.show()
#sample data
+---+-----+
| id|value|
+---+-----+
| 1| 40|
| 1| 30|
| 2| 10|
| 2| 90|
| 3| 20|
| 3| 10|
| 4| 2|
| 4| 5|
+---+-----+
然后是一些创建最终数据帧的函数,如下所示:
+---+-------------+------------------+
| id|grouped_total|anti_grouped_total|
+---+-------------+------------------+
| 1| 70| 137|
| 2| 100| 107|
| 3| 30| 177|
| 4| 7| 200|
+---+-------------+------------------+
【问题讨论】:
标签: r pyspark group-by sapply pyspark-dataframes