我想从hdfs路径中随机选择一个文件样本。下面是一段代码,它编译每个与通配符匹配的文件并将其添加到我的RDD中。
PATH_TO_RAW_DATA = "hdfs:/user/myname/documents/d*"
tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000)这包含大约5000个文件,并且可以正确编译
我想从上面的RDD中随机选择一个子样本,比如100个文件。
下面的代码是我用来做这件事的:
PATH_TO_RAW_DATA = "hdfs:/user/myname/documents/d*"
tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000)
tf = tf.takeSample(False, 100, seed = 1)根据docs的说法,这应该会给我一个包含原始RDD中100个文档的RDD。
然而,我得到了错误:java.lang.OutOfMemoryError: Java heap space
这是Spark/Pyspark中的一个bug,还是我错误地使用了这个函数?
发布于 2017-10-04 23:57:28
首先,我建议减少并行性。
tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000) 除非数据非常庞大,否则没有理由创建一百万个分区。拥有过多的分区会适得其反。
增加驱动程序内存,java.lang.OutOfMemoryError: Java堆空间的出现很可能是因为takeSample无法将100个项目分配给驱动程序。因此,尝试增加驱动程序内存可以解决此问题。否则,试着取较少的样本,取10个而不是100个,看看是否有效
https://stackoverflow.com/questions/46568564
复制相似问题