我有一个文件,每行一个 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
列是嵌套的?
- dask版本:0.15.1
- fastparquet版本:0.1.1
最佳答案
在任意 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/