【问题标题】:Pig: load data with .pig_schema schema filePig:使用 .pig_schema 模式文件加载数据
【发布时间】:2016-10-01 07:30:12
【问题描述】:

如何在同一目录中加载具有.pig_schema 架构文件的数据文件?

official Apache Pig documentationthis answer 没有正确解释不同架构字段的含义或不同的数据类型值是什么。

谁能给出一个更好、更详细的例子?

【问题讨论】:

    标签: csv apache-pig schema text-files


    【解决方案1】:

    当您在 Pig 中加载数据时,您可以选择在位于数据目录中的 .pig_schema JSON 文件中定义其架构:

    data/
    ├── data_file.csv
    └── .pig_schema
    

    如果您的 data_file.csv 看起来像:

    3,0,(mybytearray),{(1.7)},[wesam#2.9]
    9,8,(mybytearray),{(0.6)},[elshamy#6.5]
    

    你使用这个.pig_schema文件:

    {
      "fields": [
        {
          "name": "myint",
          "type": 10
        },
        {
          "name": "mylong",
          "type": 15
        },
        {
          "name": "mytupe",
          "type": 110,
          "schema": {
            "fields": [
              {
                "name": "mybytearray",
                "type": 50
              }
            ]
          }
        },
        {
          "name": "mybag",
          "type": 120,
          "schema": {
            "fields": [
              {
                "name": "mytupe",
                "type": 110,
                "schema": {
                  "fields": [
                    {
                      "name": "myfloat",
                      "type": 20
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "name": "mymap",
          "type": 100,
          "schema": {
            "fields": [
              {
                "name": null,
                "type": 25
              }
            ]
          }
        }
      ]
    }
    

    并使用此 Pig 脚本加载您的数据。

    b = LOAD '/path/to/data' USING PigStorage(',');
    

    您的数据将具有以下架构:

    b: {myint: int,mylong: long,mytupe: (mybytearray: bytearray),mybag: {mytupe: (myfloat: float)},mymap: map[double]}
    

    .pig_schema JSON 文件中,"fields" 键的值是数据中所有字段的数组。每个字段都由一个 JSON 对象定义:

    • "name" 字段名称(例如:"my_field")。
    • "type" 表示字段类型的整数(例如:55)(请参阅下面的类型值)。
    • "schema" [可选] 定义复杂类型的架构(tuplebagmap)。

    不同 Pig 数据类型的 "type" 值为:

    int       : 10
    long      : 15
    float     : 20
    double    : 25
    bytearray : 50
    chararray : 55
    map       : 100
    tuple     : 110
    bag       : 120
    

    【讨论】:

    • 不确定是否需要,但我在使用模式存储或加载加载时总是看到这种语法:PigStorage(',','-schema')
    猜你喜欢
    • 2023-03-24
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多