csv - 计算 PySpark DataFrame 中元素的出现次数
问题描述
我有一个csv文件marks.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()
它应该给出如下输出:
+------+------+------+
|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|
+----+----+----+
推荐阅读
- c# - 递归算法中的大数字时出现 StackOverflowException。优化?
- javascript - Nodejs事件循环请求响应架构,用于向多个客户端的请求发送多个响应
- python - 子网选择问题
- python - AttributeError:“dict”对象没有属性“drop_duplicates”
- python - 使用 pydbgen 模块时出现类型错误
- c# - YouTube 如何将视频传送到客户端计算机?
- html - 如何
在 html 中使用“<”?
- c - 猜谜游戏问题
- tensorflow - 深度学习 Vgg16 为什么我的模型不适合?
- flutter - 使用不包含 MediaQuery 的上下文调用 MediaQuery.of()