【问题标题】:Pyspark - groupby([col list]).agg(count([col list))Pyspark - groupby([col list]).agg(count([col list))
【发布时间】:2023-03-21 14:05:01
【问题描述】:

我怎样才能做到这一点?

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' 对象不可迭代

参考问题 - pyspark Column is not iterable

我事先不知道列名,需要通过 agg 函数提供列表作为分组的输入。

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    您可以简单地对GroupedData 对象使用.count() 方法。

    让我们准备一些数据(我假设您在spark 变量下有可用的SparkSession 对象)

    >>> 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
    

    然后只需在 DataFrame 中的所需列上使用 groupBy(*cols) 方法。

    >>> 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
    

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 2016-04-04
      • 2023-03-15
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2019-09-04
      相关资源
      最近更新 更多