pig:用.pig\u模式文件加载数据

zf2sa74q  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(368)

如何加载带有 .pig_schema 同一目录中的架构文件?
官方的apachepig文档和这个答案缺乏对不同模式字段的含义或不同数据类型值的正确解释。
有人能举个更好更详细的例子吗?

vuv7lop3

vuv7lop31#

在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" [可选]定义复杂类型的架构( tuple , bag , map ).
这个 "type" 不同清管器数据类型的值为:

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

相关问题