【发布时间】:2016-10-01 07:30:12
【问题描述】:
如何在同一目录中加载具有.pig_schema 架构文件的数据文件?
official Apache Pig documentation 和 this answer 没有正确解释不同架构字段的含义或不同的数据类型值是什么。
谁能给出一个更好、更详细的例子?
【问题讨论】:
标签: csv apache-pig schema text-files
如何在同一目录中加载具有.pig_schema 架构文件的数据文件?
official Apache Pig documentation 和 this answer 没有正确解释不同架构字段的含义或不同的数据类型值是什么。
谁能给出一个更好、更详细的例子?
【问题讨论】:
标签: csv apache-pig schema text-files
当您在 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')