我有一个类似于以下的数据框:
df1 =
AA BB CC DD
1 X Y Z
2 M N O
3 P Q R
我有另一个类似的数据框:
df2 =
BB CC DD
G K O
H L P
I M Q
我想要为df1的每一个不同的'AA'列的值复制df2的所有列和行,并将结果作为df返回:
df =
AA BB CC DD
1 X Y Z
1 G K O
1 H L P
1 I M Q
2 M N O
2 G K O
2 H L P
2 I M Q
3 P Q R
3 G K O
3 H L P
3 I M Q
我现在正在做的是:
AAs = df1.select("AA").distinct().rdd.flatMap(lambda x: x).collect()
out= []
for i in AAs:
dff = df1.filter(col('AA')==i)
temp_df = (df1.orderBy(rand())
.withColumn('AA', lit(i))
)
out.append(temp_df)
df = reduce(DataFrame.unionAll, out)
这个过程非常耗时,而且由于这些是模拟数据框,所以会导致集群失败。有没有Pyspark的方法可以解决这个问题?提前感谢。