【问题标题】:Streaming data into Apache Parquet files?将数据流式传输到 Apache Parquet 文件中?
【发布时间】:2021-02-03 17:01:24
【问题描述】:

我有两个持续时间有限(通常为 1-60 秒)的数据流,我想将它们存储在压缩数据文件中以供以后检索。目前我正在使用 HDF5,但我听说过 Parquet 并想尝试一下。

流 1:

数据以一系列记录的形式到达,大约每秒 2500 条记录。每条记录都是一个元组(时间戳、标签、数据),大小如下:

  • 时间戳:64 位值
  • 标签:8 位值
  • 数据:可变长度八位字节(通常每条记录大约 100 个字节,有时更多,有时更少)

流 2:

数据以一系列记录的形式到达,大约每秒 100000 条记录。每条记录都是一个元组(时间戳、索引、值),大小如下:

  • 时间戳:64 位
  • 索引:16 位值
  • 数据:32 位值

我可以用 Apache Parquet 做到这一点吗?我完全不熟悉这个 + 似乎找不到合适的文档;我找到了有关读取/写入整个表的文档,但在我的情况下,我需要以一定数量的行批量写入表(取决于我想要使用的缓冲区大小)。

我对 Java 和 Python 都感兴趣,可以探索其中任何一个,但我对 Python 更流利。

我为 pyarrow 找到了这个页面:https://arrow.apache.org/docs/python/parquet.html --- 它讨论了行组以及 ParquetWriterread_row_group(),但我不知道它是否支持我的用例。

有什么建议吗?

【问题讨论】:

    标签: python parquet


    【解决方案1】:

    Parquet 是用于大型数据集的文件格式,您可能会发现许多文章(如 this)使用 Parquet 处理大数据。

    由于指定的数据集具有较高的频率和吞吐量,因此可以归类为大数据类别,因此强烈建议使用parquet。

    然而,您正在研究的方向似乎不可扩展。由于该解决方案不限于简单的 Python,我建议您使用 python 而不是 pyArrow 查看Spark Streaming。您最终可能会使用 this 这样的简单脚本批量读取输入并生成 parquet 输出。

    如果您有任何疑问,请告诉我。

    【讨论】:

    • “但是,您正在研究的方向似乎无法扩展。”为什么?
    • @JasonS 是因为输入数据的频率和大小。我可以找到 pyarrow read_table (arrow.apache.org/docs/python/generated/…) 的线程选项,但似乎无法为流读取 RecordBatchStreamReader 找到它。另一方面,PySpark(流)提供开箱即用的可配置并行化,甚至可以支持更大的负载。 (例如增加接收者的数量)
    • 嗯...我所拥有的似乎没有那么快。这很重要,但我现在可以在 Python + PyTables + HDF5 单线程中处理它,无需大量 CPU 负载。
    • @JasonS,您在使用数据时是否遇到任何优化问题? (HDF5 格式)
    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多