python - Pyspark - groupby([col list]).agg(count([col list))
问题描述
我怎样才能做到这一点?
from pyspark.sql import functions as F
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext('local')
spark = SparkSession(sc)
grouped=df.groupby([col list]).agg(F.count([col list]))
我已经阅读了关于 stackoverflow 的类似问题,但找不到确切的答案。
即使我尝试放一列
grouped=dfn.groupby('col name').agg(F.count('col name'))
我得到 -
py4j\java_collections.py",第 500 行,转换为对象中的元素:TypeError: 'type' object is not iterable
参考问题 - pyspark 列不可迭代
我事先不知道列名,需要通过 agg 函数提供列表作为组的输入。
解决方案
您可以简单地对对象使用.count()
方法。GroupedData
让我们准备一些数据(我假设您在变量下有SparkSession
可用的对象)spark
>>> import pandas as pd
>>>
>>> pdf = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
>>> df = spark.createDataFrame(pdf)
>>> df.show(5)
+------------+-----------+------------+-----------+-------+
|sepal_length|sepal_width|petal_length|petal_width|species|
+------------+-----------+------------+-----------+-------+
| 5.1| 3.5| 1.4| 0.2| setosa|
| 4.9| 3.0| 1.4| 0.2| setosa|
| 4.7| 3.2| 1.3| 0.2| setosa|
| 4.6| 3.1| 1.5| 0.2| setosa|
| 5.0| 3.6| 1.4| 0.2| setosa|
+------------+-----------+------------+-----------+-------+
only showing top 5 rows
然后只需groupBy(*cols)
在 DataFrame 中的所需列上使用方法。
>>> grouped = df.groupBy(['petal_width', 'species']).count()
>>> grouped.show(5)
+-----------+----------+-----+
|petal_width| species|count|
+-----------+----------+-----+
| 1.7| virginica| 1|
| 2.2| virginica| 3|
| 1.8| virginica| 11|
| 1.9| virginica| 5|
| 1.5|versicolor| 10|
+-----------+----------+-----+
only showing top 5 rows
推荐阅读
- java - 在 IntelliJ getResources() 中编译 JavaFx 应用程序返回 null
- php - PHP 将 SVG 转换为 Jpg 缺少元素
- python - 为什么 tarfile 模块不允许压缩附加?
- c# - 在简单的 Add() -> SaveChanges() 上被选为死锁受害者
- javascript - jQuery动画隐藏一个div并平滑显示其他
- c# - 如何从datagridview中的特定列获取最大、第二大和第三大值
- wordpress - 将带参数的 URL 重定向到另一个参数 url
- html - Django:如何将 for 变量传递给查询字符串?
- javascript - 搜索设计概念的名称
- javascript - 来自客户端的节点模块的静态文件