RDD操作不适用于相对较大的数据集

时间:2018-12-13 16:36:07

标签: python apache-spark pyspark

我有一个非常大的数据集df,该数据集是通过将许多csv中的数据连接起来而创建的。
我想从中随机抽取5万行。
为此,我只是做了

newdf = df.sample(False, 0.1, seed=0).limit(50000)

我运行newdf.columns时,它照常显示所有列。
但是当我尝试做

newdf.count()

它处理了一段时间,然后在我的Py4jErrorjupyter-notebook终端中给了java.lang.OutOfMemoryError: Java heap space错误。

对于其他一些RDD动作(如

),它显示出相同的行为
newdf.describe()
newdf.show(n=10)

我知道问题出在这个特定的数据帧上,因为对于在相同代码中具有较小数据的数据帧而言,相同的操作效果很好。

我以为可能是问题所在,因为df仍在内存中,因此我尝试在取样后将其删除

import gc
del df
gc.collect()

并再次运行newdf.count(),但仍然出现相同的错误。

我也将spark中的spark/conf/spark-defaults.conf驱动程序内存更改为9g,但仍然不能解决我的问题。

我尝试在笔记本中同时使用Python 3.6Python 2.7,问题仍然存在。

我使用的spark版本是2.4.0。当我在终端中运行pyspark时,它说使用Using Python version 3.6.4

能否请您告诉我如何从这个大型数据集中提取5万行?我不在乎其他所有行是否被浪费或删除。

P.S:我首先尝试使用pandas进行此操作,但没有成功,因此我切换到pyspark

0 个答案:

没有答案