跳转到主要内容

'一个简单的JSON/python数据Parquet转换器'

项目描述

这个库封装了pyarrow,提供了一些工具,可以轻松地将JSON数据转换为Parquet格式。它主要使用Python编写。它会遍历文件。它在内存中多次复制数据。它不是最快的,但对于较小的数据集或对速度没有太大问题的用户来说,它是方便的。

安装

使用pip

pip install json2parquet

使用conda

conda install -c conda-forge json2parquet

使用方法

以下是如何加载一个随机JSON数据集的方法。

from json2parquet import convert_json

# Infer Schema (requires reading dataset for column names)
convert_json(input_filename, output_filename)

# Given columns
convert_json(input_filename, output_filename, ["my_column", "my_int"])

# Given columns and custom field names
field_aliases = {'my_column': 'my_updated_column_name', "my_int": "my_integer"}
convert_json(input_filename, output_filename, ["my_column", "my_int"], field_aliases=field_aliases)


# Given PyArrow schema
import pyarrow as pa
schema = pa.schema([
    pa.field('my_column', pa.string),
    pa.field('my_int', pa.int64),
])
convert_json(input_filename, output_filename, schema)

您也可以直接处理Python数据结构

from json2parquet import load_json, ingest_data, write_parquet, write_parquet_dataset

# Loading JSON to a PyArrow RecordBatch (schema is optional as above)
load_json(input_filename, schema)

# Working with a list of dictionaries
ingest_data(input_data, schema)

# Working with a list of dictionaries and custom field names
field_aliases = {'my_column': 'my_updated_column_name', "my_int": "my_integer"}
ingest_data(input_data, schema, field_aliases)

# Writing Parquet Files from PyArrow Record Batches
write_parquet(data, destination)

# You can also pass any keyword arguments that PyArrow accepts
write_parquet(data, destination, compression='snappy')

# You can also write partitioned date
write_parquet_dataset(data, destination_dir, partition_cols=["foo", "bar", "baz"])

如果您知道您的模式,您可以指定自定义的日期时间格式(目前只有一个)。如果您没有传递PyArrow模式,则此格式将被忽略。

from json2parquet import convert_json

# Given PyArrow schema
import pyarrow as pa
schema = pa.schema([
    pa.field('my_column', pa.string),
    pa.field('my_int', pa.int64),
])
date_format = "%Y-%m-%dT%H:%M:%S.%fZ"
convert_json(input_filename, output_filename, schema, date_format=date_format)

尽管json2parquet可以推断模式,但它也有助于从外部拉取模式

from json2parquet import load_json
from json2parquet.helpers import get_schema_from_redshift

# Fetch the schema from Redshift (requires psycopg2)
schema = get_schema_from_redshift(redshift_schema, redshift_table, redshift_uri)

# Load JSON with the Redshift schema
load_json(input_filename, schema)

操作注意事项

如果您使用此库将JSON数据转换为供Spark、Athena、Spectrum或Presto读取,请确保在写入Parquet文件时使用use_deprecated_int96_timestamps,否则您将看到一些非常奇怪的日期。

贡献

代码更改

  • 克隆库的分支

  • 运行make setup

  • 运行make test

  • 应用您的更改(不要增加版本号)

  • 如有需要,添加测试

  • 运行make test以确保没有出错

  • 提交PR

文档更改

保持文档正确和最新总是一个挑战。任何修复都受欢迎。如果您不想克隆仓库进行本地工作,请随时使用Github进行编辑,并通过Github内置功能提交拉取请求。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

json2parquet-2.2.0.tar.gz (10.5 kB 查看哈希值)

上传时间

构建分发

json2parquet-2.2.0-py3-none-any.whl (7.7 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页