количество групп в фрейме данных pyspark - PullRequest
0 голосов
/ 26 января 2020

Мой фрейм данных выглядит как -

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? Есть ли какой-нибудь правильный путь, которым я могу управлять этой вещью

1 Ответ

0 голосов
/ 26 января 2020

Ваш код выглядит нормально для меня, но когда я попытался запустить его, я вижу это

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