HDFS输入文件=> /用户/ XYZ / ABC /部分-M-00000
文件内容: -
100002030,Tom,peter,eng,block 3,lane 5,california,10021
100003031,Tom,john,doc,block 2,lane 2,california,10021
100004032,Tom,jim,eng,block 1,lane 1,california,10021
100005033,Tom,trek,doc,block 2,lane 2,california,10021
100006034,Tom,peter,eng,block 6,lane 6,california,10021
架构文件 -
rollno,名字,姓氏,资格,地址1,地址,城市,邮政编码
是否可以按以下方式进行加载: -
使用PigStorage(',')输入=加载'/ user / xyz / abc / part-m-00000';
SF = load'user / xyz / abc / sf.txt';
X =使用PigStorage(',')作为(SF)加载'输入';
它不起作用 请注意,我不想对字段名称进行硬编码
感谢快速帮助,谢谢!
答案 0 :(得分:1)
PigStorage有第二个构造函数,它有多个选项,其中一个是-schema。 根据文档,创建一个包含您的架构的隐藏文件.pig_schema,它将在加载数据时从中加载架构。 更多细节在这里 https://pig.apache.org/docs/r0.10.0/api/org/apache/pig/builtin/PigStorage.html
以下是步骤: 您需要做的第一件事是手动创建架构
// Load data by specifying schema
A = LOAD 'data' USING PigStorage(',') AS (name:chararray, amount:float);
// Now store data in with -schema option to create schema
STORE A INTO 'output' USING PigStorage(',', '-schema');
// above statement will create .pig_schema file in "output" directory. copy this file to your source directory 'data'
Now load data without specifying Schema
A_WITHOUT_SCHEMA = LOAD 'data' USING PigStorage(',');
// view the schema of relation by issuing describe statement.
DESCRIBE A_WITHOUT_SCHEMA;
// The output should be something like
{name: chararray, amount: float}
我希望澄清解决方案。