python 如何在PySpark中透视列中的值和聚合计数

8yparm6h  于 2023-05-27  发布在  Python
关注(0)|答案(1)|浏览(158)

下面是PySpark数据框架:
| 类型|子类型|
| - -----|- -----|
| 类型1|亚型1|
| 类型1|亚型1|
| 类型1|亚型1|
| 类型1|亚型2|
| 类型1|亚型3|
| 类型2|亚型1|
| 类型2|亚型1|
| 类型2|亚型2|
| 类型2|亚型2|
| 类型2|亚型2|
| 类型2|亚型3|
| 类型2|亚型3|
| 类型3|亚型1|
| 类型3|亚型1|
我的要求是基于SubType进行透视,并聚合每个类型的SubType的计数。我的预期输出是:
| 类型|亚型1|亚型2|亚型3|
| - -----|- -----|- -----|- -----|
| 1型|3|一个|一个|
| 2型|2| 3| 2|
| 第三类|2| 0| 0|
我尝试使用pivot函数,但不知何故聚合没有发生:

df = df \
    .groupby(df.Type) \
    .pivot("SubType") \
    .agg(
       F.count('SubType')
    )

有人能帮我找到解决办法吗?

js81xvg6

js81xvg61#

这里的代码(从pandas改为pyspark)你能检查一下它是否适合你吗?

from pyspark.sql import SparkSession
from pyspark.sql.functions import count

# Create a SparkSession
spark = SparkSession.builder.getOrCreate()

# Create the DataFrame
data = [
    ('Type1', 'SubType1'),
    ('Type1', 'SubType1'),
    ('Type1', 'SubType1'),
    ('Type1', 'SubType2'),
    ('Type1', 'SubType3'),
    ('Type2', 'SubType1'),
    ('Type2', 'SubType1'),
    ('Type2', 'SubType2'),
    ('Type2', 'SubType2'),
    ('Type2', 'SubType2'),
    ('Type2', 'SubType3'),
    ('Type2', 'SubType3'),
    ('Type3', 'SubType1'),
    ('Type3', 'SubType1')
]

df = spark.createDataFrame(data, ['Type', 'SubType'])

# Pivot the DataFrame and aggregate by count
pivot_df = df.groupBy('Type').pivot('SubType').agg(count('SubType').alias('count'))

# Fill any missing values with 0
pivot_df = pivot_df.fillna(0)

# Display the result
pivot_df.show()

我也测试过。结果如下:

$ python app.py                                                                                                                                                

Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
23/05/27 12:31:40 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
+-----+--------+--------+--------+
| Type|SubType1|SubType2|SubType3|
+-----+--------+--------+--------+
|Type2|       2|       3|       2|
|Type3|       2|       0|       0|
|Type1|       3|       1|       1|
+-----+--------+--------+--------+

相关问题