PySpark: как дублировать строки информационного кадра на основе значений в одном столбце - PullRequest
0 голосов
/ 15 мая 2018

Из простого информационного кадра, подобного этому в PySpark:

col1    col2    count
A       1       4
A       2       8
A       3       2
B       1       3
C       1       6

Я хотел бы продублировать строки, чтобы каждое значение col1 было с каждым значением col2, а количество столбцов было заполнено 0 для теху нас нет первоначальной стоимости.Было бы так:

col1    col2    count
A       1       4
A       2       8
A       3       2
B       1       3
B       2       0
B       3       0
C       1       6
C       2       0
C       3       0

У вас есть идеи, как это сделать эффективно?

1 Ответ

0 голосов
/ 15 мая 2018

Вы ищете crossJoin.

data = df.select('col1', 'col2')
// this one gives you all combinations of col1+col2
all_combinations = data.alias('a').crossJoin(data.alias('b')).select('a.col1', 'b.col2')
// this one will append with count column from original dataset, and null for all other records.
all_combinations.alias('a').join(df.alias('b'), on=(col(a.col1)==col(b.col1) & col(a.col2)==col(b.col2)), how='left').select('a.*', b.count)
...