PySpark:如何根据一列中的值复制数据帧的行

时间:2018-05-15 15:28:39

标签: python apache-spark dataframe pyspark apache-spark-sql

来自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 :(得分:0)

您正在寻找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)