[英]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.