• 数学之路-分布式计算-disco(4)


    第一个參数iter是一个迭代器,涉及被map函数产生的键和值。它们是reduce实例。

    在本例中。单词随机被托付给不同的reduce实例。然后,要单词同样,处理它的reduce也同样。可确保终于合计是正确的。

    第二个參数params与map函数中一致,在此。仅简单使用disco.util.kvgroup()来提取每一个单词统计计数。累计计数,yield(产生)结果。

    执行作业

    以下開始执行作业。可使用大量參数定制作业,但通常来说。对于简单的任务来说 ,仅使用当中3个就可以。除了启动作业之外,我们还须要输出结果。首先,我们在作业完毕前要等待,通过调用wait等待调用完毕,完毕后会返回结果。为方便起见。通过job对象调用wait及其他相关方法。

    result_iterator()函数取结果文件地址列表。它被wait()函数返回,iterates(迭代)遍历全部结果中的键值对。

    defmap(line, params):

        for word in line.split():

            yield word, 1

    defreduce(iter, params):

        from disco.util import kvgroup

        for word, counts in kvgroup(sorted(iter)):

            yield word, sum(counts)

    if__name__ == '__main__':

        job =Job().run(input=["http://discoproject.org/media/text/chekhov.txt"],

                        map=map,

                        reduce=reduce)

        for word, count inresult_iterator(job.wait(show=True)):

            print(word, count)

     

    本博客全部内容是原创,假设转载请注明来源

    http://blog.csdn.net/myhaspl/


    假设一切妥当。可看到作业执行,输入从tagdata:bigtxt中读入,这个是開始时刻创建的终于打印输出,在job执行时,可打开(或执行disco master的端口)。查看作业的实时进程。

    python count_words.py

    也可在控制台上查看作业进程,例如以下: 

    DISCO_EVENTS=1 python count_words.py

    正如您所示,创建一个新的迪斯科的工作是相当简单的。你能够在随意数量的方面扩展这个简单的样例。比如,通过使用params对象包含停用词的列表。

    假设你把迪斯科分布式文件系统的数据,你能够试试改变输到tag://data:bigtxt。以及加上map_reader =disco.worker.task_io.chain_reader。

    你能够试着用sum_combiner(),使job更有效率。

    你也能够尝试自己定义功能分区和读取函数,用与map和reduce函数一样的方式编写,然后,你能够试着链接job在一起,以便之前的job输出成为下一个的输入。

    disco是设计得尽可能的简单,这样你就能够专注于你自己的问题,而不是框架。

  • 相关阅读:
    SQL之mysql常用操作语句(入门级)
    总结了一些指针易出错的常见问题(七)
    C++之类和对象课后习题1
    SQL之50个常用的SQL语句
    SQL之经典SQL语句大全
    C语言之计算字符串最后一个单词的长度,单词以空格隔开
    spring之HttpInvoker
    Java之解压流(ZipInputStream)
    jetty之嵌入式开发
    java之压缩流(ZipOutputStream)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5287054.html
Copyright © 2020-2023  润新知