我有两个Spark数据帧,每个数据帧有5.39亿行和4列。A和B列是字符串,C、D、E和F列是浮点数
DF1
-----------------
A B C D
"A1" "B1" 1.1 1.2
"A2" "B2" 1.3 1.4
DF2
-----------------
A B E F
"A1" "B1" 2.1 2.2
"A2" "B2" 2.3 2.4
我想加入DF1(5.39亿行)和DF2(5.39万行)。我在50节点集群和8GB执行器内存上尝试了DF1.join(DF2,“fullouter”)。它会自动终止集群,并显示内存不足错误消息。
是否有替代方法与rdds连接,或者比df.join()内存效率高的数据集?
您还需要检查以下内容:1) 您如何对数据进行分区 2) 您根据分区数分配了多少个执行程序 3) 如上所述:驱动程序内存
请检查以下内容
我有两个数据帧和包含IP地址,我正在尝试将IP地址映射到地理位置信息,如经度和纬度,它们是中的列。 我运行它作为一个火花提交作业,但操作花了很长时间,即使只有不到2500行。 我的代码: 有没有其他方法可以加入这两张桌子?还是我做错了?
使用Spark Dataset/DataFrame联接时,我面临长时间运行且OOM作业失败的问题。 以下是输入: ~10个不同大小的数据集,大部分是巨大的( 经过一番分析,我发现作业失败和缓慢的原因是歪斜键:当左侧有数百万条记录时,用连接键。 我用了一些蛮力的方法来解决这个问题,这里我想和大家分享一下。 如果您有更好的或任何内置的解决方案(针对常规Apache Spark),请与他人分享。
基于“SC”代码,我需要将SRCTable与RefTable-1或RefTable-2连接起来 条件:如果SC为“D”,则SRCTable在KEY=KEY1上与RefTable-1连接以获得值。否则,如果SC为“U”,则SRCTable与键=键2上的RefTable-2连接 这是输入spark数据帧。 预期产出: 注意:输入表将有数百万条记录,因此需要一个优化的解决方案
我需要根据一些共享的键列将许多数据帧连接在一起。对于键值RDD,可以指定一个分区程序,以便具有相同键的数据点被洗牌到相同的执行器,因此连接更有效(如果在之前有与洗牌相关的操作)。可以在火花数据帧或数据集上做同样的事情吗?
我正在尝试连接两个apache spark sql DataFrame,并将第一个数据帧的列值替换为另一个。如: 我需要执行左连接并将 DF1.col1 的值替换为 DF2.col3,其中 DF1.col1 = DF2.col1。我不知道该怎么做。此外,如上例所示,DF1 除了“col1”和“col2”之外还有更多列,我无法对所有列都应用 select。我正在尝试类似的东西, 但这似乎行不通。另外
我有一个包含n列的数据帧,我想用空值替换所有这些列中的空字符串。 我试过用 和 他们两个都没有工作。 如有任何线索,我们将不胜感激。谢谢