Apache pig apachepig中的日期时间解析

Apache pig apachepig中的日期时间解析,apache-pig,Apache Pig,我试图在一个Pig脚本中解析一个日期,我得到了以下错误“Hadoop不返回任何错误消息” 以下是日期格式示例:3/9/16下午2:50 下面是我如何解析它的: data = LOAD 'cleaned.txt' AS (Date, Block, Primary_Type, Description, Location_Description, Arrest, Domestic, District, Year); times = FOREACH data GENERATE ToDate(Date,

我试图在一个Pig脚本中解析一个日期,我得到了以下错误“Hadoop不返回任何错误消息”

以下是日期格式示例:3/9/16下午2:50

下面是我如何解析它的:

data = LOAD 'cleaned.txt'
AS (Date, Block, Primary_Type, Description, Location_Description, Arrest, Domestic, District, Year);

times = FOREACH data GENERATE ToDate(Date, 'M/d/yy h:mm a') As Time;
您可以看到数据文件

你知道吗? 谢谢


编辑:

看起来错误是由“times”上的STORE命令引起的

如果我倒垃圾,我会得到:

错误1066:无法打开别名时间的迭代器


只有当我使用ToDate函数时才会发生这种情况,因为我还有其他脚本可以很好地工作。

首先,您需要在LOAD语句中指定加载程序:

USING PigStorage('\t')
我假设您正在使用制表符分隔符。 如果没有架构,请使用类型指定架构

So you're load statement will be sg like this:
data = LOAD 'SO/date2parse.txt' USING PigStorage('\t') AS (Date:chararray, Block:chararray, Primary_Type:chararray, Description:chararray, Location_Description:chararray, Arrest:chararray, Domestic:chararray, District:chararray, Year:chararray);
现在,我只对所有内容使用chararray类型,但是您必须指定类型,即适合您的表示形式

在此之后,日期转换工作正常,正如您所写: (2016-03-09T23:55:00.000Z) (2016-03-09T23:55:00.000Z) (2016-03-09T23:55:00.000Z)

我的测试脚本:

data = LOAD 'SO/date2parse.txt' USING PigStorage('\t') AS (Date:chararray, Block:chararray, Primary_Type:chararray, Description:chararray, Location_Description:chararray, Arrest:chararray, Domestic:chararray, District:chararray, Year:chararray);
times = FOREACH data GENERATE ToDate(Date, 'M/d/yy h:mm a') As Time;
DUMP times;
更新: 一些解释

顺便说一下,默认加载程序是清管器存储

PigStorage是加载操作员的默认加载功能

但最好具体说明一下。 原始问题是由于缺少数据类型造成的

如果不指定类型,字段默认为type bytearray


因此ToDate在输入类型上失败。

首先,您需要在LOAD语句中指定加载程序:

USING PigStorage('\t')
我假设您正在使用制表符分隔符。 如果没有架构,请使用类型指定架构

So you're load statement will be sg like this:
data = LOAD 'SO/date2parse.txt' USING PigStorage('\t') AS (Date:chararray, Block:chararray, Primary_Type:chararray, Description:chararray, Location_Description:chararray, Arrest:chararray, Domestic:chararray, District:chararray, Year:chararray);
现在,我只对所有内容使用chararray类型,但是您必须指定类型,即适合您的表示形式

在此之后,日期转换工作正常,正如您所写: (2016-03-09T23:55:00.000Z) (2016-03-09T23:55:00.000Z) (2016-03-09T23:55:00.000Z)

我的测试脚本:

data = LOAD 'SO/date2parse.txt' USING PigStorage('\t') AS (Date:chararray, Block:chararray, Primary_Type:chararray, Description:chararray, Location_Description:chararray, Arrest:chararray, Domestic:chararray, District:chararray, Year:chararray);
times = FOREACH data GENERATE ToDate(Date, 'M/d/yy h:mm a') As Time;
DUMP times;
更新: 一些解释

顺便说一下,默认加载程序是清管器存储

PigStorage是加载操作员的默认加载功能

但最好具体说明一下。 原始问题是由于缺少数据类型造成的

如果不指定类型,字段默认为type bytearray


因此ToDate在输入类型上失败。

您可以发布如何加载数据以及数据片段(2-3行)吗?您可以将其发布为CSV吗?不清楚您的字段分隔符在哪里。当我尝试以“”作为分隔符使用PigStorage加载,并尝试仅解析日期(不含小时部分)时,它工作正常。不幸的是,我不能这样做,因为这是一个学校项目,也是他们给我们的唯一数据文件!顺便说一句,我更新了信息,问题似乎出在别处。你能发布你如何加载数据以及数据片段(2-3行)吗?你能以CSV的形式发布吗?不清楚您的字段分隔符在哪里。当我尝试以“”作为分隔符使用PigStorage加载,并尝试仅解析日期(不含小时部分)时,它工作正常。不幸的是,我不能这样做,因为这是一个学校项目,也是他们给我们的唯一数据文件!顺便说一句,我更新了信息,看起来问题出在别处了。谢谢你的帮助!但是,如果这段代码适合您,那么问题可能出在其他地方,因为当我运行它(刚刚更改了文件路径)时,我遇到了以下错误:错误1066:无法打开alias的迭代器。看起来导致错误的不是ToDate函数,而是DUMP命令,对于我的代码来说,是STORE命令。我是新来的猪,你认为这可能是一个版本问题吗?任何没有ToDate的脚本对我来说都很好。DUMP是一个基本命令,应该可以工作。谢谢你的帮助!但是,如果这段代码适合您,那么问题可能出在其他地方,因为当我运行它(刚刚更改了文件路径)时,我遇到了以下错误:错误1066:无法打开alias的迭代器。看起来导致错误的不是ToDate函数,而是DUMP命令,对于我的代码来说,是STORE命令。我是新来的猪,你认为这可能是一个版本问题吗?任何没有ToDate的脚本对我来说都很好。DUMP是一个基本命令,应该可以工作。