簡體   English   中英

計數 PySpark DataFrame 中元素的出現次數

[英]Count occurance of an element in PySpark DataFrame

我有一個 csv 文件標記。csv。 我已經使用 pyspark 閱讀它並創建了一個數據框 df。

它看起來像這樣(csv 文件):

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

如何獲取數據框 df 中每一列中“a”的計數? 謝謝。

由於我們可以在 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()

它應該給 output 如下:

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

要了解有關火花 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()

它應該給你 output 如下所示:

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

您可以使用 CASE when 語句來獲取每列中“a”的計數

import pyspark.sql.functions as F   

df2 = df.select( 
    F.sum(when(df("sub1")=="a",1).otherwise(0)).alias("sub1_cnt"),
    F.sum(when(df("sub2") == "a",1).otherwise(0)).alias("sub2_cnt"),
    F.sum(when(df("sub3") == "a",1).otherwise(0)).alias("sub3_cnt"))

df2.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM