Ваш код выглядит нормально для меня, но когда я попытался запустить его, я вижу это
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 в последних двух строках.
просто обрежьте пробелы с помощью 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|
+---+---+------+---+---+---+