pyspark 数据框中的 groupby 计数
groupby count in pyspark data frame
我的数据框看起来像 -
id age gender category
1 34 m b
1 34 m c
1 34 m b
2 28 f a
2 28 f b
3 23 f c
3 23 f c
3 23 f c
我希望我的数据框看起来像 -
id age gender a b c
1 34 m 0 2 1
2 28 f 1 1 0
3 23 f 0 0 2
我已经完成了 -
from pyspark.sql import functions as F
df = df.groupby(['id','age','gender']).pivot('category').agg(F.count('category')).fillna(0)
df.show()
如何在pyspark中管理?有什么正确的方法可以管理这个东西
你的代码对我来说看起来不错,但是当我尝试 运行 它时,我看到了这个
df = spark.read.csv('dbfs:/FileStore/tables/txt_sample.txt',header=True,inferSchema=True,sep="\t")
df = df.groupby(['id','age','gender']).pivot('category').agg(count('category')).fillna(0)
df.show()
df:pyspark.sql.dataframe.DataFrame = [id: integer, age: integer ... 5 more fields]
+---+---+------+---+---+---+---+
| id|age|gender| a| b| c| c |
+---+---+------+---+---+---+---+
| 2| 28| f| 1| 1| 0| 0|
| 1| 34| m| 0| 2| 1| 0|
| 3| 23| f| 0| 0| 1| 2|
+---+---+------+---+---+---+---+
因为最后两行c后面多了一个space字符
只是 trim space 使用 rtrim()
df = spark.read.csv('dbfs:/FileStore/tables/txt_sample.txt',header=True,inferSchema=True,sep='\t')
df = df.withColumn('Category',rtrim(df['category'])).drop(df['category'])
df = df.groupby(['id','age','gender']).pivot('Category').agg(count('Category')).fillna(0)
df.show()
df:pyspark.sql.dataframe.DataFrame = [id: integer, age: integer ... 4 more fields]
+---+---+------+---+---+---+
| id|age|gender| a| b| c|
+---+---+------+---+---+---+
| 2| 28| f| 1| 1| 0|
| 1| 34| m| 0| 2| 1|
| 3| 23| f| 0| 0| 3|
+---+---+------+---+---+---+
我的数据框看起来像 -
id age gender category
1 34 m b
1 34 m c
1 34 m b
2 28 f a
2 28 f b
3 23 f c
3 23 f c
3 23 f c
我希望我的数据框看起来像 -
id age gender a b c
1 34 m 0 2 1
2 28 f 1 1 0
3 23 f 0 0 2
我已经完成了 -
from pyspark.sql import functions as F
df = df.groupby(['id','age','gender']).pivot('category').agg(F.count('category')).fillna(0)
df.show()
如何在pyspark中管理?有什么正确的方法可以管理这个东西
你的代码对我来说看起来不错,但是当我尝试 运行 它时,我看到了这个
df = spark.read.csv('dbfs:/FileStore/tables/txt_sample.txt',header=True,inferSchema=True,sep="\t")
df = df.groupby(['id','age','gender']).pivot('category').agg(count('category')).fillna(0)
df.show()
df:pyspark.sql.dataframe.DataFrame = [id: integer, age: integer ... 5 more fields]
+---+---+------+---+---+---+---+
| id|age|gender| a| b| c| c |
+---+---+------+---+---+---+---+
| 2| 28| f| 1| 1| 0| 0|
| 1| 34| m| 0| 2| 1| 0|
| 3| 23| f| 0| 0| 1| 2|
+---+---+------+---+---+---+---+
因为最后两行c后面多了一个space字符
只是 trim space 使用 rtrim()
df = spark.read.csv('dbfs:/FileStore/tables/txt_sample.txt',header=True,inferSchema=True,sep='\t')
df = df.withColumn('Category',rtrim(df['category'])).drop(df['category'])
df = df.groupby(['id','age','gender']).pivot('Category').agg(count('Category')).fillna(0)
df.show()
df:pyspark.sql.dataframe.DataFrame = [id: integer, age: integer ... 4 more fields]
+---+---+------+---+---+---+
| id|age|gender| a| b| c|
+---+---+------+---+---+---+
| 2| 28| f| 1| 1| 0|
| 1| 34| m| 0| 2| 1|
| 3| 23| f| 0| 0| 3|
+---+---+------+---+---+---+