python - 使用 Python 在 Parquet 中嵌套数据

标签 python json parquet dask

我有一个文件,每行一个 JSON。这是一个示例:

{
    "product": {
        "id": "abcdef",
        "price": 19.99,
        "specs": {
            "voltage": "110v",
            "color": "white"
        }
    },
    "user": "Daniel Severo"
}

我想创建一个包含以下列的 Parquet 文件:

product.id, product.price, product.specs.voltage, product.specs.color, user

我知道 parquet 有一个使用 Dremel 算法的嵌套编码,但我无法在 python 中使用它(不知道为什么)。

我是 pandas 和 dask 的重度用户,所以我尝试构建的管道是 json data -> dask -> parquet -> pandas,虽然如果有人有使用 Python 在 parquet 中创建和读取这些嵌套编码的简单示例 我认为这就足够了 :D

编辑

所以,在深入研究 PR 之后,我发现了这个:https://github.com/dask/fastparquet/pull/177

这基本上就是我想做的。虽然,我仍然无法让它一直工作。我如何准确地告诉 dask/fastparquet 我的 product 列是嵌套的?

最佳答案

在任意 Parquet 嵌套数据的读取和写入路径上实现转换非常复杂——实现分解和重组算法以及对某些 Python 数据结构的相关转换。我们在 Arrow/parquet-cpp 的路线图上有这个(见 https://github.com/apache/parquet-cpp/tree/master/src/parquet/arrow ),但它还没有完成(现在只支持简单的结构和列表/数组)。拥有此功能很重要,因为其他使用 Parquet 的系统,如 Impala、Hive、Presto、Drill 和 Spark,在其 SQL 方言中原生支持嵌套类型,因此我们需要能够忠实地读写这些结构来自 Python。

这也可以在 fastparquet 中类似地实现,但是无论您如何分割它,都将需要大量工作(和编写测试用例)。

如果没有人比我早,我可能会在今年晚些时候亲自承担这项工作(在 parquet-cpp 中),但我很乐意得到一些帮助。

关于python - 使用 Python 在 Parquet 中嵌套数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45341182/

相关文章:

csv - Spark : avoid task restart when writing

javascript - 使用 Javascript 从嵌套的 JSON 排序索引

java - 如何使用 org.apache.parquet.hadoop.ParquetWriter 将 NULL 值写入 Parquet ?

python - keras 将两个损失与可调权重相结合,其中输出不具有相同的维度

python - 将嵌套列表转换为 numpy 数组

ruby-on-rails - 限制 json 结果的数量 - Rails API

json - Golang 未设置结构体字段

scala - 将 Scala 对象写入 Parquet 的最佳方法是什么?

python - 将excel导入mysql使用python并转换日期戳

python - 用 Python 编写 yara 规则