仅加载PIG中的特定字段?

电脑研究员

这是我的文件:

Col1, Col2, Col3, Col4, Col5

我只需要Col2Col3

目前,我正在这样做:

a = load 'input' as (Col1:chararray, 
                     Col2:chararray, 
                     Col3:chararray, 
                     Col4:chararray);
b = foreach a generate Col2, Col3;

有没有办法只直接加载Col2Col3不是先加载整个input,然后再加载generate所需列?

所有语言

您只GENERATE查找所需列的方法是一种有效执行您所要查询的方法的方法。请记住,所有数据都存储在HDFS上,并且在启动脚本时不会将所有数据都加载到内存中。即使您没有保留这些字节以供处理时,仍然必须从磁盘上读取这些字节,因此从不加载该数据没有性能优势。优点在于您不必将其发送到您的方法即可完成的reducer。

如果Pig可以告诉您将不使用某个列,它将立即“修剪”它,从本质上为您完成了对您所做的操作b = foreach a generate Col2, Col3;但是,如果您使用的UDF可能会访问其他字段,则不会发生这种情况,因为Pig不会查看UDF的内部以查看它们是否被使用。例如,假设Col3是一个int如果你有

b = group a by Col2;
c = foreach b generate group, SUM(a.Col3);

那么Pig会自动为您修剪第一和第四列,因为它可以看到它们从未被使用过。但是,如果您改为

b = group a by Col2;
c = foreach b generate group, COUNT(a);

那么Pig无法修剪,因为它在COUNTUDF中看不到,也不知道不会使用其他字段。如果不确定Pig是否会执行此修剪操作,则可以使用现有的foreach/generate方法。当您启动脚本时,Pig应该打印一条诊断消息,列出它能够删除的所有列。

相反,如果您的问题是只对几列感兴趣时不想提供完整的架构,则可以完全跳过该架构并将其放在GENERATE

a = load 'input';
b = foreach a generate (chararray) $1 as Col2, (chararray) $2 as Col3;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Apache Pig中的HCatalog可以仅加载特定分区吗?

仅更新模型中的特定字段

仅获取cloudkit中的特定字段?

仅更新cakephp中的特定字段

仅更新特定字段

仅检查字符串中存在的特定字段

如何仅更新实体框架(核心)中的特定字段

如何仅使用Java查询MongoDB中的特定字段?

Rails:仅显示表单选择字段中的特定对象

如何仅更新Django模型中的特定字段?

Django CreateView-在Foreignkey字段中仅显示特定对象

如何仅重设角度5中形式的特定字段

仅加载特定的 DIV 内页

Pig 中跨列的字段总和

JPA加载实体,但在@OneToMany列表中,仅特定于加载

在 Autodesk Forge Viewer 中首次加载文件时,仅优先加载特定的 GUID

如果 Mongo 集合中的特定字段包含特定值,如何仅运行函数?

仅允许特定用户和超级用户编辑模型中的特定字段

仅读取大型JSON中的特定字段并导入到Pandas Dataframe中

如何显示仅加载特定帖子?

如何使用 SFV2 在伪造查看器中仅加载特定对象?

仅当用户在angularjs中具有特定角色时才加载html部件

NHibernate:如何仅加载实体列表中的特定属性(而不是完整对象)?

遍历对象并仅选择特定字段

仅使用Elasticsearch选择特定字段

Django:仅清除特定模型字段?

仅通过Laravel Collection的特定字段?

如何验证字段以仅包含特定值?

如何指定在MySql的select *查询输出中仅显示某些特定字段?