如何计算 Apache Pig 中字符串的长度?

Posted

技术标签:

【中文标题】如何计算 Apache Pig 中字符串的长度?【英文标题】:How to calculate the length of a string in Apache Pig? 【发布时间】:2015-02-25 11:44:28 【问题描述】:

在 pig 中,substring 函数有三个参数,我需要从第 4 个位置获取子字符串到字符串的长度。

所以我指定了:

substring(division,4,string.length(division))

它显示错误Could not resolve string.LENGTH using imports:。 如何在 pig 中找到字符串的长度?

【问题讨论】:

你能发布你的错误和你的代码吗? 【参考方案1】:

您可以为此使用SIZE。

SUBSTRING(division,4,SIZE(division))

【讨论】:

这些不能解决问题【参考方案2】:

之前提供的回复对我没有用。有效的是:

SUBSTRING(division,4,(int)SIZE(division))

注意int 演员表。

【讨论】:

【参考方案3】:

SIZE()是内部调用String.length()的函数

所以在你的情况下(正如弗雷德里克所说):

SUBSTRING(division,4,SIZE(division))

【讨论】:

【参考方案4】:

我也遇到了同样的错误。在尝试了将近 1 天后,我找到了解决方案,解决方案是,您应该执行以下代码,

REGISTER '/usr/local/piggybank.jar';
maindata = LOAD '/user/pig/storm/StormEvents_details-ftp_v1.0_d1950_c20170120.csv' using org.apache.pig.piggybank.storage.CSVExcelStorage(',','NO_MULTILINE','UNIX','SKIP_INPUT_HEADER');

B = foreach maindata generate (int)$20 as INJURIES_DIRECT,(int)$21 as INJURIES_INDIRECT,(int)$22 as DEATHS_DIRECT,(int)$23 as DEATHS_INDIRECT,(chararray)$24 as DAMAGE_PROPERTY,(int)$10 as YEAR,(chararray)$11 as MONTH_NAME,(int)$0 as BEGIN_YEARMONTH;
k = foreach B generate org.apache.pig.piggybank.evaluation.string.LENGTH(DAMAGE_PROPERTY) as len; 

因此,如果您可以在这些代码中看到,则必须包含您的字段来代替 DAMAGE_PROPERTY 。所以我们的问题的解决方案是,

org.apache.pig.piggybank.evaluation.string.LENGTH(DAMAGE_PROPERTY) as len; 

现在对于子字符串你可以做这些代码,你可以相应地改变你的字符串名称,

substringdata = foreach B generate SUBSTRING(DAMAGE_PROPERTY,0,org.apache.pig.piggybank.evaluation.string.LENGTH(DAMAGE_PROPERTY)-1) as substr; 

我认为它应该可以解决问题。

【讨论】:

以上是关于如何计算 Apache Pig 中字符串的长度?的主要内容,如果未能解决你的问题,请参考以下文章

计算过滤的值 - Apache PIG

Apache Pig 学生成绩平均计算

Apache PIG - 如何更改文件的标准输出名称“part-r-00000”?

在 Apache Pig 中计算不同的项目

如何使用 apache pig 递归加载文件

Apache Pig:用字符串替换 null