首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rdd takeSample上的Spark作业无限期挂起

rdd takeSample上的Spark作业无限期挂起
EN

Stack Overflow用户
提问于 2017-10-04 23:24:35
回答 1查看 206关注 0票数 1

我想从hdfs路径中随机选择一个文件样本。下面是一段代码,它编译每个与通配符匹配的文件并将其添加到我的RDD中。

代码语言:javascript
复制
PATH_TO_RAW_DATA = "hdfs:/user/myname/documents/d*"
tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000)

这包含大约5000个文件,并且可以正确编译

我想从上面的RDD中随机选择一个子样本,比如100个文件。

下面的代码是我用来做这件事的:

代码语言:javascript
复制
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,还是我错误地使用了这个函数?

EN

回答 1

Stack Overflow用户

发布于 2017-10-04 23:57:28

首先,我建议减少并行性。

代码语言:javascript
复制
      tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000) 

除非数据非常庞大,否则没有理由创建一百万个分区。拥有过多的分区会适得其反。

增加驱动程序内存,java.lang.OutOfMemoryError: Java堆空间的出现很可能是因为takeSample无法将100个项目分配给驱动程序。因此,尝试增加驱动程序内存可以解决此问题。否则,试着取较少的样本,取10个而不是100个,看看是否有效

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46568564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档