collect是pyspark中可以将rdd转换为list的转换操作,虽然很好用,但也需要注意,不是可以随心所欲地用的。
collect的读取相当于从所有分布式机器上把数据拉下来放在本地展示:
这个操作一方面把分布式变成了单机操作,失去了分布式的意义;
另一方面就是存放本地会消耗相当一部分的内存;当rdd很大时,内存溢出会直接导致程序卡死。
所以如果只想看看数据格式,用take取样就可以了。
但如果一定要做相关执行,可以把rdd中需要处理的数据部分用map提出来,再collect(),一定程度上减少内存的使用,不要一股脑地collect。