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"
[可选] 定义复杂类型的架构(tuple
、bag
、map
)。
不同 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 模式文件加载数据的主要内容,如果未能解决你的问题,请参考以下文章
使用模式加载数据时出现 Apache Pig ClassCast 异常