我需要从二进制文件中读取数据。这些文件很小,大约为or 1 = 1
,因此使用1 MB
并逐个文件处理它们(开销太大)可能效率不高。
我可以在一个大文件中加入它们然后使用binaryFiles()
,但是记录大小只是binaryRecords()
,所以我想将几个记录连接在一起,以便生成大块的大小为几十兆字节。二进制文件格式允许这样做。
我怎样才能做到这一点? 更一般的说法:这是解决问题的正确方法吗?
谢谢!
答案 0 :(得分:0)
从Spark 2.1开始,binaryFiles()
会将多个小型输入文件合并到一个分区中(默认为每个分区128 MB),因此使用binaryFiles()
读取小型文件现在应该效率更高。
有关binaryFiles()
以及如何调整默认的128 MB大小(如果需要)的更多详细信息,另请参见https://stackoverflow.com/a/51460293/215945。
答案 1 :(得分:-2)
我不确定,但这种方式可能会有所帮助:
N是您的小文件数。
rdd = sc.parallelize(1到N,N)。mapPartitions(binaryFiles())。collect()