小编kem*_*mri的帖子

标准输出附加到文件大小限制

我正在从美国国家公路交通安全管理局 API 中提取大约 25,000,000 个 VIN 编号的 VIN 规范。这是大量数据,因为我没有以任何方式转换数据,curl似乎是一种比 Python 更高效、更轻量级的完成任务的方式(因为 Python 的 GIL 使并行处理有点痛苦)。

在下面的代码中,vins.csv是一个包含 2500 万个 VIN 的大样本的文件,分成 100 个 VIN 的块。这些将被传递给使用 4 个内核的 GNU Parallel。一切都nhtsa_vin_data.csv在最后倾倒。

$ cat vins.csv | parallel -j10% curl -s --data "format=csv" \
   --data "data={1}" https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/ \
      >> /nas/BIGDATA/kemri/nhtsa_vin_data.csv
Run Code Online (Sandbox Code Playgroud)

这个过程开始时每分钟写入大约 3,000 个 VIN,随着时间的推移逐渐变慢(目前约为 1,200/分钟)。

我的问题

  • 我的命令中是否有任何内容会nhtsa_vin_data.csv随着规模的增长而增加开销?
  • 这与 Linux 处理>>操作的方式有关吗?

更新 #1 - 解决方案

每个@slm 的第一个解决方案 - 使用并行的 tmp 文件选项将每个 curl 输出写入其自己的 .par 文件,最后合并:

$ …
Run Code Online (Sandbox Code Playgroud)

shell-script curl stdout gnu-parallel

5
推荐指数
1
解决办法
713
查看次数

标签 统计

curl ×1

gnu-parallel ×1

shell-script ×1

stdout ×1