在 JavaScript 前端应用程序上读取大型 CSV 文件
Posted
技术标签:
【中文标题】在 JavaScript 前端应用程序上读取大型 CSV 文件【英文标题】:Reading large CSV file on a JavaScript frontend application 【发布时间】:2020-02-26 12:27:16 【问题描述】:我有几个 CSV 文件,我想在基于 javascript 的前端应用程序中使用它们。它们中的大多数都存储在云上。考虑到某些 CSV 有时非常大(几 GB),我首先考虑使用 parquetjs 进行压缩,并将它们作为小型 parquet 文件传输到前端(我们的 CSV 文件和 parquet 中有大量冗余允许我们实现高压缩结果,即一个 1.6Gb 的 CSV 文件被压缩为一个 7Mb 的 parquet 文件)。
对于优化问题,我打算使用 parquetjs 的流功能“即时”提取 CSV 文件。但不知何故,这个功能似乎还不是很成熟。我想知道是否有可能找到另一种解决方案来进行快速流式 CSV 解压缩。是否有基于 zip 的 JavaScript 包可以解决问题?直接传输和读取大型 CSV 文件对我来说似乎不是最佳解决方案。
【问题讨论】:
我实际上很难想出一个能够以高性能方式处理如此大的 CSV 文件的通用系统 谁将使用这个应用程序?没有人可以处理页面上千兆字节的信息。我认为您需要重新考虑设计,也许使用 fetch 的想法和具有分页功能的 api。 @abbaf33f 我们目前正在优化我们的后端以减少 CSV 文件。事实上,我们不需要前面的所有 CSV 数据。只有几列用于可视化。我们曾考虑使用 apache-arrow 来满足我们的需求,以实现类似于 Pandas 的行为,但该解决方案被证明是有缺陷的 【参考方案1】:如果我对问题的理解正确,并且根据您想在客户端上执行的操作,您可能会使用 Fetch API 并使用 response.body
流来处理它,因为它仍在下载。
a post by Jake Archibald 涉及如何读取 CSV 数据流,这可能很有用。
【讨论】:
以上是关于在 JavaScript 前端应用程序上读取大型 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章