首页 > 解决方案 > 计算 PySpark DataFrame 中元素的出现次数

问题描述

我有一个csv文件marks.csv。我已经使用 pyspark 阅读并创建了一个数据框 df。

它看起来像这样(csv 文件):

sub1,sub2,sub3
a,a,b
b,b,a
c,a,b

如何获取数据框 df 中每一列中“a”的计数?谢谢。

标签: csvdataframepysparkcount

解决方案


由于我们可以在 Spark 中利用 SQL 的特性,我们可以简单地执行以下操作:

df.selectExpr("sum(if( sub1 = 'a' , 1, 0 )) as count1","sum(if( sub2 = 'a' , 1, 0 )) as count2","sum(if( sub3 = 'a' , 1, 0 )) as count3").show()

它应该给出如下输出:

+------+------+------+
|count1|count2|count3|
+------+------+------+
|     1|     2|     1|
+------+------+------+

要了解有关 spark SQL 的更多信息,请访问

:编辑:

如果您想对所有列执行此操作,则可以尝试以下操作:

from pyspark.sql.types import Row

    final_out = spark.createDataFrame([Row()]) # create an empty dataframe

    #Just loop through all columns

    for col_name in event_df.columns:
        final_out = final_out.crossJoin(event_df.selectExpr("sum(if( "+col_name+" = 'a' , 1, 0 )) as "+ col_name))

    final_out.show()

它应该为您提供如下输出:

    +----+----+----+
    |sub1|sub2|sub3|
    +----+----+----+
    |   1|   2|   1|
    +----+----+----+

推荐阅读