【问题标题】:Alternative to CSV?CSV 的替代品?
【发布时间】:2011-04-21 22:35:37
【问题描述】:

我打算构建一个返回自定义文本格式的 RESTful 服务。鉴于我的数据量很大,XML/JSON 过于冗长。我正在寻找基于行的文本格式。

CSV 是一个明显的候选者。但是,我想知道那里是否没有更好的东西。我通过一些研究发现的唯一一个是CTXFielded Text

我正在寻找提供以下内容的格式:

  • 纯文本,易于阅读
  • 很容易被大多数软件平台解析
  • 无需更改软件客户端即可更改列定义

字段文本看起来相当不错,我绝对可以自己建立一个规范,但我很想知道其他人做了什么,因为这一定是一个非常古老的问题。令人惊讶的是没有更好的标准。

你有什么建议?

【问题讨论】:

    标签: rest csv plaintext


    【解决方案1】:

    我会说,既然 CSV 是标准,而且既然每个人都可以解析它,那就使用它吧。

    如果我处于你的情况,我会承受带宽损失并使用 GZIP+XML,只是因为它非常易于使用。

    而且,在这一点上,您始终可以要求您的用户支持 GZIP 并将其作为 XML/JSON 发送,因为这样可以很好地消除线路上的冗余。

    【讨论】:

    • 或者说,天底下没有人能解析它。
    • 能否请您给我看一下 csv 的官方规范。如何编码unicode?如何在csv文件中引用逗号?如何在 csv 中对 PDF/PNG 等二进制数据进行编码?
    【解决方案2】:

    我确定您已经考虑过这一点,但我是制表符分隔文件的粉丝(字段之间的 \t,每行末尾的换行符)

    【讨论】:

    • 能否请您给我看一下这个的官方规格。如何编码unicode?如何在制表符分隔的文件中引用制表符?如何在制表符分隔的文件中对 PDF/PNG 等二进制数据进行编码?
    【解决方案3】:

    您可以尝试 YAML,与 XML 或 JSON 等格式相比,它的开销相对较小。

    此处的示例:http://www.yaml.org/

    令人惊讶的是,网站的文本本身就是 YAML。

    【讨论】:

    • AFAIK YAML 不是表格的。每行可以有不同的属性/列。
    • @guettli 可以说 YAML 是表格格式的超集,因为可以存储在 CSV 中的所有内容也可以存储在 YAML 中。反之当然是不对的。 (例如:gist.github.com/noirotm/e2eaa5f40a346910901285584dca75c2
    【解决方案4】:

    我一直在思考这个问题。我想出了一个简单的格式,可以很好地适用于您的用例:JTable。

     {
        "header": ["Column1", "Column2", "Column3"],
        "rows"  : [
                    ["aaa", "xxx", 1],
                    ["bbb", “yyy”, 2],
                    ["ccc", “zzz”, 3]
                  ]
      }
    

    如果您愿意,可以找到a complete specification of the JTable format,提供详细信息和资源。但这是不言自明的,任何程序员都会知道如何处理它。唯一需要的是,真的,说这是 JSON。

    【讨论】:

      【解决方案5】:

      浏览现有的答案,最让我印象深刻的是有点过时了。特别是在“大数据”方面,值得关注的 CSV 替代方案包括:

      • ORC : 'Optimized Row Columnar' 使用行存储,在 Python/Pandas 中很有用。起源于 HIVE,由Hortonworks 优化。架构在页脚中。 Wikipedia 条目目前相当简洁 https://en.wikipedia.org/wiki/Apache_ORC 但 Apache has a lot of detail

      • Parquet :类似地基于列,具有类似的压缩。经常与 Cloudera Impala 一起使用。

      • Avro:来自 Apache Hadoop。基于行,但使用 Json 模式。对 Pandas 的支持能力较差。常见于 Apache Kafka 集群中。

      所有内容都是可拆分的,所有人都难以理解,都使用模式描述其内容,并且都可以使用 Hadoop。在经常读取累积数据的情况下,基于列的格式被认为是最好的;对于多次写入,Avro 可能更适合。参见例如https://www.datanami.com/2018/05/16/big-data-file-formats-demystified/

      列格式的压缩可以使用 SNAPPY(更快)或 GZIP (slower but more compression)。

      您可能还想研究 Protocol Buffers、Pickle(Python 特定)和 Feather(用于 Python 和 R 之间的快速通信)。

      【讨论】:

        猜你喜欢
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 2012-01-25
        • 2015-08-05
        • 2011-01-01
        相关资源
        最近更新 更多