是否可以使用猪在GENERATE条件中强制转换为长串?

时间:2014-07-12 19:40:21

标签: apache-pig

我有一堆长号,有时是字符串“INFINITY”或“NaN”。 假设A是记录而B是长:

我试过......

FOREACH A GENERATE (B is not null?B:-1)

虽然上述情况并不准确,但有时“B”显然是一个字符串。 是否有一些条件或复合条件来检查它是否为空并且1)不是字符串或2)转换B使得我可以确保它不为空并且不以条件中的“NaN”开头? / p>

我的目标是让long转换为数字(如果是“NaN”则为-1,如果不是则保持不变)。

描述A将显示以下内容(如果不存在则显示NaN):

{    “B”:28.2524232 }

2 个答案:

答案 0 :(得分:1)

也许是这样的:

FOREACH A GENERATE (B is not null ? (B matches 'NaN' OR B matches 'INFINITY' ? -1 : (int) B):-1)

因为" NaN"和" INFINITY"猪可能推断出bitearray或chararray,检查DESCRIBE为GoBrewers14推荐。

虽然您可以使用模式加载并将其指定为chararray,然后按照我的方式进行转换:)

注意:" B不为空"不应该是必要的,但如果是;)

答案 1 :(得分:1)

试试这个,

首先将长数据加载为chararray格式,然后对其执行条件,然后转换回long。例如,

A = load 'data_file' as (B:chararray);
result1 = FOREACH A GENERATE (B matches '(.*)NaN(.*)'?'-1':(B matches '(.*)INFINITY(.*)'?'-1':B)) as B;
result2 = FOREACH result1 GENERATE (long)B;

希望它能为我工作和工作。