使用Pyspark通过筛选器的Groupby

tpxzln5u  于 2022-11-21  发布在  Spark
关注(0)|答案(1)|浏览(136)

我有一个从聚类中得到的df,看起来像这样:
| 丛集|变量1|变量2|
| - -|- -|- -|
| 第0页|三百三十四|三十二|
| 第0页|第0页|四十五|
| 三个|四百五十三|第0页|
| 三个|三百二十|第0页|
| 第0页|第0页|二十八人|
| 一个|四百六十七|四十九|
| 三个|三百二十四|十六|
| 一个|五十八|2个|
我试着为每个聚类和每个变量得出下一个结果:
变量1
| 丛集|0的%|%值!= 0|值计数!= 0|值的总和|总体百分比|
| - -|- -|- -|- -|- -|- -|
| 第0页|六十七|三十三人|一个|三百三十四|十七岁|
| 一个|第0页|100个|2个|五二五|二十七人|
| 三个|第0页|100个|三个|小行星1097|五十六人|
变量2
| 丛集|0的%|%值!= 0|值计数!= 0|值的总和|总体百分比|
| - -|- -|- -|- -|- -|- -|
| 第0页|第0页|100个|第0页|一百零五|六十一|
| 一个|第0页|100个|第0页|五十一个|二十九人|
| 三个|六十七|三十三人|一个|十六|10个|

:% universe是每个变量值的总和,在本例中,变量1为:334 + 525 + 1097 = 1956(这是100%,因此334是总数的17%)。

我在学习Pyspark的过程中,我在语法上遇到了困难,这是我正在尝试的代码,但我不知所措,因为我不知道如何管理过滤来迭代变量和集群:

for i in list_of_variables:
   print(i)
   df.groupBy('Cluster').agg((count((col(i) == 0) / df.filter(col('Cluster') == 0).count()) * 100).alias('% of 0'), (count((col(i) != 0) / df.filter(col('Cluster') == 0).count() * 100).alias('% of vals diff than 0')..

我将非常感谢任何想法,可以给予我如何实现这一目标的光。有一个可怕的一天!

x4shl7ld

x4shl7ld1#

也许你可以试着用这样的方法来获得计数的部分:

for i in list:
   print(i)
   output = df.filter(col(i) != 0).groupBy(col('Cluster')).agg(
    count(col('*')).alias('Count_vals_dif_0')).show()

相关问题