Csv 使用PigStorage加载缺少最后字段的数据

Csv 使用PigStorage加载缺少最后字段的数据,csv,hadoop,apache-pig,bigdata,Csv,Hadoop,Apache Pig,Bigdata,我使用Hadoop上的Pig来分析CSV格式的日志。有时,我的数据提供者会在日志中添加新字段,所有新字段都会添加到每行的末尾 我想知道的是,当globbing模式匹配“旧格式”和“新格式”文件时,如何正确地实现这些CSV文件的加载,同时仍然能够访问最新文件上的新字段 让我们举一个实际的例子: 2014/12/20/log_2014-12-20.csv: f1, f2, f3 2014/12/21/log_2014-12-21.csv: f1, f2, f3 2014/12/22/lo

我使用Hadoop上的Pig来分析CSV格式的日志。有时,我的数据提供者会在日志中添加新字段,所有新字段都会添加到每行的末尾

我想知道的是,当globbing模式匹配“旧格式”和“新格式”文件时,如何正确地实现这些CSV文件的加载,同时仍然能够访问最新文件上的新字段

让我们举一个实际的例子:

2014/12/20/log_2014-12-20.csv:
  f1, f2, f3

2014/12/21/log_2014-12-21.csv:
  f1, f2, f3

2014/12/22/log_2014-12-22.csv:
  f1, f2, f3

2014/12/23/log_2014-12-23.csv:
  f1, f2, f3, f4, f5

2014/12/24/log_2014-12-24.csv:
  f1, f2, f3, f4, f5
请注意从2014年12月23日开始出现的新字段:f4和f5

当使用以下Pig语句时,2014-12-23之前的文件中的数据将不会加载,因此在Pig别名
MYDATA
中只有2014-12-23开始的数据可用:

MYDATA = LOAD 's3://mybucket/logs/2014/12' using PigStorage(',') as (
  f1: int,
  f2: int,
  f3: int,
  f4: int,
  f5: int
);
如果我想从所有预期的时间范围加载数据,我需要省略新字段:

MYDATA = LOAD 's3://mybucket/logs/2014/12' using PigStorage(',') as (
  f1: int,
  f2: int,
  f3: int
);
但我不能利用最新数据上的新字段。在我的实际用例中,上述语句存储在一个Pig宏中,用于从多个脚本中使用日志数据,在宏中添加新字段会破坏加载的不是最新数据的脚本

您对处理数据方案中的此类变更有何建议


谢谢你的帮助。

我在使用拼花地板()方面有很好的经验。它们还提供清管器仓库和装载机。Loader允许指定要读取数据的特定模式,该模式将使用NULL(模式演变的一些简单形式)填充数据中不可用的字段。在您的情况下,您需要首先将数据转换为拼花地板格式,但它应该按照您的预期工作