【问题标题】:Splitting large JSON data using Unix command Split使用 Unix 命令拆分拆分大型 JSON 数据
【发布时间】:2020-06-28 14:12:22
【问题描述】:

Unix Split command拆分大数据的问题:split -l 1000 file.json myfile。想要将此文件拆分为多个文件,每个文件有 1000 条记录。但我将输出作为单个文件 - 没有变化。

P.S. 创建文件将 Pandas Dataframe 转换为 JSON。

编辑:事实证明,我的 JSON 格式设置为仅包含一行。 wc -l file.json 正在返回 0

这里是示例:file.json

[
{"id":683156,"overall_rating":5.0,"hotel_id":220216,"hotel_name":"Beacon Hill Hotel","title":"\u201cgreat hotel, great location\u201d","text":"The rooms here are not palatial","author_id":"C0F"},
{"id":692745,"overall_rating":5.0,"hotel_id":113317,"hotel_name":"Casablanca Hotel Times Square","title":"\u201cabsolutely delightful\u201d","text":"I travelled from Spain...","author_id":"8C1"}
]

【问题讨论】:

标签: json bash dataset


【解决方案1】:

每个分区调用一次 jq 加上一次以确定分区的数量将是非常低效的。以下解决方案足以实现您的答案中认为可接受的分区:

jq -c ".[]" file.json | split -l 1000

但是,如果认为每个文件都需要进行漂亮的打印,您可以为每个文件运行jq -s .,这仍然比多次运行.[N:N+S] 更有效。

如果每个分区本身应该是一个 JSON 数组,那么请参阅Splitting / chunking JSON files with JQ in Bash or Fish shell?

【讨论】:

【解决方案2】:

在其他地方询问后,该文件实际上是一行。

Reformatting with JQ(以紧凑形式),将启用拆分,但处理文件至少需要删除第一个和最后一个字符(或在拆分文件中添加 '[' & ']')

【讨论】:

  • 我尝试使用 jq 但问题没有解决。我跑了这个:猫合并.json | jq > 新文件.json。它为每个对象创建了新行。就像 'id' 是一行,'overall_rating' 是下一行。所以数据仍然不能用于 Unix Split 命令。
【解决方案3】:

我建议使用 jq (see manual) 拆分 JSON 数组。

cat file.json | jq length              # get length of an array
cat file.json | jq -c '.[0:999]'       # first 1000 items
cat file.json | jq -c '.[1000:1999]'   # second 1000 items
...

通知-c 以获得紧凑的结果(打印不漂亮)。

为了自动化,您可以编写一个简单的 bash 脚本,根据数组长度 (jq length) 将文件拆分成块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多