Pig:使用 .pig_schema 模式文件加载数据

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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')

以上是关于Pig:使用 .pig_schema 模式文件加载数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在cloudera中合并零件文件和标题

使用模式加载数据时出现 Apache Pig ClassCast 异常

在 PIG 中读取带有模式的文件

阅读 pig scheme/header 以了解元组中字段的顺序

使用 pig 脚本查找不匹配的记录

Pig - 地图缩减模式下的权限被拒绝