在 PIG 中处理货币价值 - pigstorage

Posted

技术标签:

【中文标题】在 PIG 中处理货币价值 - pigstorage【英文标题】:Dealing with currency values in PIG - pigstorage 【发布时间】:2016-06-16 13:30:56 【问题描述】:

我在 HDFS 中加载了 2 列 CSV 文件。第 1 列是型号名称,第 2 列是以美元为单位的价格。 Example - Model: IE33, Price: $52678.00

当我运行以下脚本时,价格值都返回为两位数的结果示例 $52。

ultraPrice = LOAD '/user/maria_dev/UltrasoundPrice.csv' USING PigStorage(',') AS (
Model, Price);

dump ultraPrice;

我所有的价值都在 20000 美元到 60000 美元之间。不知道为什么会被截断。

如果我更改 CSV 文件并从价格值中删除 $ 一切正常,但我知道必须有更好的方法。

【问题讨论】:

【参考方案1】:

请注意,在您的加载语句中,您没有指定数据类型。默认情况下,模型和价格将是 bytearray 类型,因此存在差异。

您可以从 csv 文件中删除 $ 或将数据加载为 chararray 并替换 $ 符号并将其转换为浮点数。

A = LOAD '/user/maria_dev/UltrasoundPrice.csv' USING TextLoader() as (line:chararray);
A1 = FOREACH A GENERATE REPLACE(line,'([^a-zA-Z0-9.,\\s]+)','');
B = FOREACH A1 GENERATE FLATTEN(STRSPLIT($0,','));
B1 = FOREACH B GENERATE $0 as Model,(float)$1 as Price;
DUMP B1;

【讨论】:

以上是关于在 PIG 中处理货币价值 - pigstorage的主要内容,如果未能解决你的问题,请参考以下文章

Pig:无法使用 PigStorage 加载数据

pig 不使用 PigStorage 加载地图数据

使用'-tagFile'选项的项目文件名字段,使用PigStorage'-tagFile'加载,Pig 0.14

在 PIG 中加载 CSV 文件

Apache Pig 处理带有引号的字段的 CSV

阅读 pig scheme/header 以了解元组中字段的顺序