Pig:使用.pig_schema架构文件加载数据

时间:2016-10-01 07:30:12

标签: csv apache-pig schema text-files

如何在同一目录中加载带有.pig_schema模式文件的数据文件?

official Apache Pig documentationthis answer缺少对不同架构字段的含义或不同数据类型值的正确解释。

有人可以提供更好,更详细的例子吗?

1 个答案:

答案 0 :(得分: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