jjzjj

hadoop - Pig - FilterFunc 不接受整个元组

coder 2024-01-09 原文

我的 Pig 的一个过滤器功能有问题。

但首先,我会告诉你上下文。

A = LOAD 'pig/hado/start_extrait2.csv' USING PigStorage(';') as (DAT_START:chararray, COD_IPUSER:chararray, NDI_START:chararray);

hado_search_file = LOAD 'pig/hado/recherche_hado.csv' USING PigStorage(';') as (DATE_HADO:chararray, IP_RECHERCHEE:chararray);

result2 = JOIN hado_search_file by IP_RECHERCHEE LEFT OUTER, A by COD_IPUSER;

让我们尝试可视化“result2”变量:

describe result2;

{hado_search_file::DATE_HADO: chararray,hado_search_file::IP_RECHERCHEE: chararray,A::COD_IPUSER: chararray,A::DAT_START: chararray,A::NDI_START: chararray}

dump result2;

(2014/03/10 00:00:00,192.168.2.67,,,)
(2014/03/10 00:00:00,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)
(2014/03/10 00:00:00,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)
(2014/03/10 00:00:01,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)
(2014/03/10 00:00:01,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)

然后,我尝试使用 FilterFunc

flt = FILTER result2 BY dateInferiorOrNull();

代码的开头是:

public class dateInferiorOrNull  extends FilterFunc {

    @Override
    public Boolean exec(Tuple input) throws IOException {

        System.out.println(input);

        ...

    }
}

我期望得到与我之前制作的“dump result2”相同的输出,但相反,我得到了这样的结果:

(2014/03/10 00:00:00,79.92.147.88)

只取了前两个字段!

当我尝试显示元组大小时,程序说元组的大小是 2 !

所以过滤器函数似乎没有将整个元组作为输入。

为什么会这样?

感谢您的帮助。

最佳答案

从输入元组(您作为参数传递给 UDF)获取结果中所需的列,然后将其添加到 DataBag,然后从您的 UDF 返回此 DataBag。这个 UDF 的输出是一个 Bag,然后在你的 pig 脚本中将这个 Bag 展平。

关于hadoop - Pig - FilterFunc 不接受整个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539749/

有关hadoop - Pig - FilterFunc 不接受整个元组的更多相关文章

  1. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  2. ruby - 在好的 Ruby 代码中没有注释是否被认为是可以接受的? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion我审查了一些用Ruby编写的专业代码,没有发现任何评论。代码读起来相当清晰,但没有self记录。我应该期望专业编写的Ruby代码有注释吗?或者,是否有一些Ruby原则认为注释不是必需的?

  3. ruby-on-rails - Ruby rand() 不能接受变量? - 2

    我对此有点困惑。我在RoR项目中的最终目标是从我的数据库中获取单个随机配置文件。我想它应该是这样的:@profile=Profile.find_by_user_id(rand(User.count))它一直抛出错误,因为user_id0不存在,所以我把它的一部分拿出来检查发生了什么:@r=rand(User.count)每次都返回0。发生什么了?我注册了5个假用户和5个相关配置文件来测试这个。如果我将Profile.find_by_user_id(rand(User.count))重写为Profile.find_by_user_id(3)它工作得很好。User.count也在工作。所以

  4. Ruby gsub 方法 - 接受散列? - 2

    Ruby的gsub字符串方法应该接受散列。如此处所写:http://www.ruby-doc.org/core/classes/String.html#M001185“如果第二个参数是一个哈希,并且匹配的文本是它的键之一,则对应的值是替换字符串。”他们举了一个例子:'hello'.gsub(/[eo]/,'e'=>3,'o'=>'*')#=>"h3ll*"问题是,它对我不起作用(ruby1.8.7):in`gsub':can'tconvertHashintoString(TypeError)这发生在完全相同的行上。为什么? 最佳答案

  5. ruby - ruby 中的同一个程序如何接受来自用户的输入以及命令行参数 - 2

    我的ruby​​脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes

  6. ruby-on-rails - 在 Rails 中需要整个目录树的好方法是什么? - 2

    我正在使用Rails3.2.2并希望递归加载某个目录中的所有代码。例如:[Railsroot]/lib/my_lib/my_lib.rb[Railsroot]/lib/my_lib/subdir/support_file_00.rb[Railsroot]/lib/my_lib/subdir/support_file_01.rb...基于谷歌搜索,我试过:config.autoload_paths+=["#{Rails.root.to_s}/lib/my_lib/**"]config.autoload_paths+=["#{Rails.root.to_s}/lib/my_lib/**/"

  7. ruby-on-rails - 使用 Rspec 测试 rake 任务不接受参数 - 2

    根据thispostbyStephenHagemann,我正在尝试为我的一个rake任务编写Rspec测试.lib/tasks/retry.rake:namespace:retrydotask:message,[:message_id]=>[:environment]do|t,args|TextMessage.new.resend!(args[:message_id])endendspec/tasks/retry_spec.rb:require'rails_helper'require'rake'describe'retrynamespaceraketask'dodescribe're

  8. 大数据之Hadoop数据仓库Hive - 2

    目录:一、简介二、HQL的执行流程三、索引四、索引案例五、Hive常用DDL操作六、Hive常用DML操作七、查询结果插入到表八、更新和删除操作九、查询结果写出到文件系统十、HiveCLI和Beeline命令行的基本使用十一、Hive配置一、简介Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。特点:简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析;灵活性高,可以自定义用户函数(UDF)和

  9. ruby - Ruby 方法可以接受 block 或参数吗? - 2

    我正在上TheOdinProject的类(class),现在我必须自己编写一个新的#count方法(使用另一个名称),它的行为与Enumerable模块中的普通方法一样。有关计数的文档说明如下(http://ruby-doc.org/core-2.4.0/Enumerable.html#method-i-count):count→intcount(item)→intcount{|obj|block}→intReturnsthenumberofitemsinenumthroughenumeration.Ifanargumentisgiven,thenumberofitemsinenumt

  10. ruby - 为什么退出 Ruby 线程会杀死我的整个程序? - 2

    我有这段代码:puts"Start"loopdoThread.startdoputs"Hellofromthread"exitendtext=getsputs"#{text}"endputs"Done"我希望看到“Start”后跟“Hellofromthread”,然后我可以输入会得到回显的输入。相反,我得到“Start”和“Hellofromthread”,然后程序退出。来自关于exit的文档:Terminatesthrandschedulesanotherthreadtoberun.Ifthisthreadisalreadymarkedtobekilled,exitreturnst

随机推荐