我想从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中的错误还是我错误地使用了这个功能?
答案 0 :(得分:0)
首先,我建议减少并行性
tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000)
除非数据非常庞大,否则没有理由制作100万个分区。分区太多会产生反效果。
增加驱动程序内存,java.lang.OutOfMemoryError:Java堆空间最有可能发生,因为takeSample无法向驱动程序提供100个项目。所以尝试增加驱动程序内存可以解决问题。 否则尝试采取较小的样本,取10而不是100,看看是否有效