hadoop pig - 用逗号加载浮点数

Posted

技术标签:

【中文标题】hadoop pig - 用逗号加载浮点数【英文标题】:hadoop pig - loading float with commas 【发布时间】:2015-03-23 18:45:22 【问题描述】:

我有一个 csv 文件,其中包含用逗号而不是点编码的浮点数。 我制作了一个精确的浮点类型的猪加载脚本,但是在读取逗号时,猪无法将其转换为浮点数(他希望浮点数有点)。

如何在加载阶段通过点更改逗号? 我知道 UDF 可以解决问题,但是还有其他更简单的方法吗?

谢谢。

【问题讨论】:

您能提供一些示例输入吗? 不是真的,因为我无法从我的 owrkplace 访问互联网 :-( csv 的分隔符是什么?我假设不是逗号?在这种情况下,您可以将其加载为字符串,使用 Pig 将逗号替换为点,然后转换为浮点数。 【参考方案1】:

好的,用一些简单的数据来测试这个只是为了好玩:

1,2;2,3;4,5
5,6;6,7;7,8

猪脚本:

data = load 'commatest.csv' using PigStorage(';') as (f1:chararray, f2:chararray, f3:chararray);
replaced = foreach data generate REPLACE(f1, ',', '.') as f1dot, REPLACE(f2, ',', '.') as f2dot, REPLACE(f3, ',', '.') as f3dot;
fdata = foreach replaced generate (float)f1dot as f1, (float)f2dot as f2, (float)f3dot as f3;
dump fdata;

输出:

(1.2,2.3,4.5)
(5.6,6.7,7.8)

测试是否真的转换为float:

test = foreach fdata generate f1*f2*f3;
dump test;

输出:

(12.42)
(292.65598)

【讨论】:

以上是关于hadoop pig - 用逗号加载浮点数的主要内容,如果未能解决你的问题,请参考以下文章

支持小数点和小数点逗号的字符串到浮点数转换

正确转换浮点数?

寻求一个C语言程序,输入一个浮点数num及一个整数m,输出浮点数位数。如m=0,输出个位;m=1,输出十位。

ruby 转换由浮点分隔的逗号分隔的数字整数或浮点数

python基础 ()bool值 列表 元组 字典 浮点数)

正则表达式从逗号分隔列表中删除连续重复(整数和/或浮点数)