Spark/pySpark:读取小型二进制数据文件的最佳方式

Posted

技术标签:

【中文标题】Spark/pySpark:读取小型二进制数据文件的最佳方式【英文标题】:Spark/pySpark: Best way to read small binary data files 【发布时间】:2015-09-03 17:25:19 【问题描述】:

我需要从二进制文件中读取数据。这些文件很小,大约为1 MB,因此使用binaryFiles() 并逐个文件处理它们可能效率不高(开销太大)。

我可以将它们合并到一个大文件中,然后使用binaryRecords(),但是记录大小只有512 bytes,所以我想将几条记录连接在一起,以产生几十个大小的块兆字节。二进制文件格式允许这样做。

我怎样才能做到这一点? 更笼统地说:这是解决问题的正确方法吗?

谢谢!

【问题讨论】:

【参考方案1】:

从 Spark 2.1 开始,binaryFiles() 会将多个小输入文件合并到一个分区中(默认为每个分区 128 MB),因此现在使用 binaryFiles() 读取小文件应该更加高效。

有关binaryFiles() 以及如何调整默认 128 MB 大小(如果需要)的更多详细信息,另请参阅 https://***.com/a/51460293/215945。

【讨论】:

【参考方案2】:

我不确定,但这种方式可能会有所帮助:

N 是您的小文件的数量。

rdd = sc.parallelize(1 to N, N).mapPartitions(binaryFiles()).collect()

【讨论】:

以上是关于Spark/pySpark:读取小型二进制数据文件的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark (PySpark) 在读取 CSV 时处理空值

Spark (PySpark) 文件已存在异常

如何有效地将 MySQL 表读入 Apache Spark/PySpark?

在二进制文件中读取和写入字符串c ++

第一次运行 Spark、PySpark

无法在 spark/pyspark 中创建数组文字