我的Spark DataFrame 中有多个二进制列(0和1)。我想计算每列中1的百分比,并将结果投影到另一个 DataFrame 中。
输入 DataFrame dF如下:
+------------+-----------+
| a| b|
+------------+-----------+
| 0| 1|
| 1| 1|
| 0| 0|
| 1| 1|
| 0| 1|
+------------+-----------+
预期产出如下:
+------------+-----------+
| a| b|
+------------+-----------+
| 40| 80|
+------------+-----------+
40(2/5)和80(4/5)分别是a列和b列中1的百分比。
到目前为止,我尝试创建一个自定义聚合函数,将两列a和b传递给它,执行group by以获取0和1的计数,计算0和1的百分比,最后过滤 DataFrame 以仅保留1。
selection = ['a', 'b']
@F.udf
def cal_perc(c, dF):
grouped = dF.groupBy(c).count()
grouped = grouped.withColumn('perc_' + str(c), ((grouped['count']/5) * 100))
return grouped[grouped[c] == 1].select(['perc_' + str(c)])
dF.select((dF[c].alias(c) for c in selection)).agg((cal_perc(c, dF).alias(c) for c in selection)).show()
这似乎不起作用。我想不出哪里出错了。感谢您的帮助。谢谢。