【问题标题】:My Pig Script is creating empty files into HDFS我的 Pig 脚本正在将空文件创建到 HDFS
【发布时间】:2016-11-03 00:12:17
【问题描述】:

我有这样的声明:

--Insert a new column based on filename
Data = LOAD '/user/cloudera/Source_Data' using PigStorage('\t','-tagFile');

Data_Schema = FOREACH Data GENERATE
(chararray)$1 AS Date,
(chararray)$2 AS ID,
(chararray)$3 AS Interval,
(chararray)$4 AS Code,
(chararray)$5 AS S_In,
(chararray)$6 AS S_Out,
(chararray)$7 AS C_In,
(chararray)$8 AS C_Out,
(chararray)$9 AS Traffic;

--Split into different directories
SPLIT Data_Schema INTO Src1 IF (Date == '2016-06-25.txt'),
Src2 IF (Date == '2014-07-31.txt'),
Src3 IF (Date == '2016-01-01.txt');

STORE Src1 INTO '/user/cloudera/Source_DatA/2016-06-25' using PigStorage('\t');
STORE Src2 INTO '/user/cloudera/Source_Data/2014-07-31.txt' using PigStorage('\t');
STORE Src2 INTO '/user/cloudera/Source_Data/2016-01-01' using PigStorage('\t');

还有一个我最初来源数据的例子:

10000 1388530800000 39 8.600870350350515 13.86183926855984 1.7218329193014124 3.424444103320796 25.972920214509095

但是当我执行它时运行成功,但是HDFS中的文件没有数据......

请注意,我根据文件名添加了一个新列。这就是为什么我在 Foreach Statment 中多了一个专栏...

【问题讨论】:

  • 您的拆分语句都不是真的,因此一切都是空的
  • 我的文本文件有这个名称,所以我的第一列(日期)等于它的文件名...我不知道为什么我的拆分语句无法识别值

标签: text split apache-pig hdfs


【解决方案1】:

如果您的输入文件名为2016-06-25.txt2014-07-31.txt2016-01-01.txt,则$0 将引用新添加的列,并且它将包含文件名。 你必须这样做:

Data_Schema = FOREACH Data GENERATE
(chararray)$0 AS Date,
(chararray)$1 AS ID,
...

或者只是在加载文件时指定架构,其余部分保持原样:

Data = LOAD '/user/cloudera/Source_Data' using PigStorage('\t','-tagFile') as (Date:chararray, ID:chararray, ... ;

【讨论】:

  • 不知道这个功能。感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2015-05-23
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多