如何在同一目录中加载带有.pig_schema
模式文件的数据文件?
official Apache Pig documentation和this answer缺少对不同架构字段的含义或不同数据类型值的正确解释。
有人可以提供更好,更详细的例子吗?
答案 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"
[可选]定义复杂类型的架构(tuple
,bag
,map
)。不同Pig数据类型的"type"
值为:
int : 10
long : 15
float : 20
double : 25
bytearray : 50
chararray : 55
map : 100
tuple : 110
bag : 120