Apache spark 如何在Spark中高效地连接具有不同列集的数据帧?
我有两个具有不同但重叠列集的表。我想以pandas的方式连接它们,但spark中的效率非常低Apache spark 如何在Spark中高效地连接具有不同列集的数据帧?,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我有两个具有不同但重叠列集的表。我想以pandas的方式连接它们,但spark中的效率非常低 X: A B 0 1 3 1 2 4 Y: A C 0 5 7 1 6 8 pd.concat(X, Y): A B C 0 1 3 NaN 1 2 4 NaN 0 5 NaN 7 1 6 NaN 8 我试着用Spark SQL来做这件事 select A, B, null as C from X union all selec
X:
A B
0 1 3
1 2 4
Y:
A C
0 5 7
1 6 8
pd.concat(X, Y):
A B C
0 1 3 NaN
1 2 4 NaN
0 5 NaN 7
1 6 NaN 8
我试着用Spark SQL来做这件事
select A, B, null as C from X union all select A, null as B, C from Y
。。。而且速度非常慢。我将此查询应用于两个大小为(79行,17330列)和(92行,16列)的表。在Spark 1.62上运行129s,在Spark 2.01上运行319s,在pandas上运行1.2s。
为什么这么慢?这是某种臭虫吗使用spark可以更快地完成吗?
编辑:
我试着用编程的方式来做这件事,就像这里一样:-它甚至更慢
问题似乎是添加空列也许可以以不同的方式解决,或者这部分可以更快一些?a)如何读取数据?b) 您是如何配置集群的?这只是一个测试设置,所以我通过./bin/pyspark在笔记本电脑上运行独立的spark实例。我用python对数据进行预处理,然后调用
X=sc.parallelize(行列表).toDF(列名)
,将其放入数据帧中。重点的可能重复是高效。你链接中的解决方案和我的一样慢。