我有一个非常大的数据集df
,该数据集是通过将许多csv
中的数据连接起来而创建的。
我想从中随机抽取5万行。
为此,我只是做了
newdf = df.sample(False, 0.1, seed=0).limit(50000)
我运行newdf.columns
时,它照常显示所有列。
但是当我尝试做
newdf.count()
它处理了一段时间,然后在我的Py4jError
和jupyter-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.6
和Python 2.7
,问题仍然存在。
我使用的spark
版本是2.4.0
。当我在终端中运行pyspark
时,它说使用Using Python version 3.6.4
。
能否请您告诉我如何从这个大型数据集中提取5万行?我不在乎其他所有行是否被浪费或删除。
P.S:我首先尝试使用pandas
进行此操作,但没有成功,因此我切换到pyspark
。