Apache pig apachepig中的日期时间解析
我试图在一个Pig脚本中解析一个日期,我得到了以下错误“Hadoop不返回任何错误消息” 以下是日期格式示例:3/9/16下午2:50 下面是我如何解析它的: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,
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是一个基本命令,应该可以工作。