如何计算 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 中字符串的长度?的主要内容,如果未能解决你的问题,请参考以下文章