当前位置: 首页 > 知识库问答 >
问题:

链接MapReduces-Google AppEngine

翟俊
2023-03-14

以下是管道代码:

class SongsPurchasedTogetherPipeline(base_handler.PipelineBase):

  def run(self, filekey, blobkey):
    bucket_name = app_identity.get_default_gcs_bucket_name()
    intermediate_output = yield mapreduce_pipeline.MapreducePipeline(
        "songs_purchased_together_intermediate",
        "main.songs_purchased_together_map1",
        "main.songs_purchased_together_reduce1",
        "mapreduce.input_readers.BlobstoreLineInputReader",
        "mapreduce.output_writers.GoogleCloudStorageOutputWriter",
        mapper_params={
            "blob_keys": blobkey,
        },
        reducer_params={
            "output_writer": {
                "bucket_name": bucket_name,
                "content_type": "text/plain",
            }
        },
        shards=1)
    yield StoreOutput("SongsPurchasedTogetherIntermediate", filekey, intermediate_output)

    intermediate_output_key = yield BlobKey(intermediate_output)
    output = yield mapreduce_pipeline.MapreducePipeline(
        "songs_purchased_together",
        "main.songs_purchased_together_map2",
        "main.songs_purchased_together_reduce2",
        "mapreduce.input_readers.BlobstoreLineInputReader",
        "mapreduce.output_writers.GoogleCloudStorageOutputWriter",
        mapper_params=(intermediate_output_key),
        reducer_params={
            "output_writer": {
                "bucket_name": bucket_name,
                "content_type": "text/plain",
            }
        },
        shards=1)
    yield StoreOutput("SongsPurchasedTogether", filekey, output)

下面是BlobKey类,它接受中间输出并生成供Map2使用的blob密钥:

class BlobKey(base_handler.PipelineBase):

  def run(self, output):
    blobstore_filename = "/gs" + output[0]
    blobstore_gs_key = blobstore.create_gs_key(blobstore_filename)
    return {
      "blob_keys": blobstore_gs_key
    }

StoreOutput类与Google的MapReduce demo https://github.com/googleCloudplatform/appengine-mapReduce/blob/master/python/demo/main.py中的类相同,并且执行与BlobKey类相同的操作,但还将Blob的URL作为链接发送到HTML。

共有1个答案

申查猛
2023-03-14

好吧,我发现Google已经从GAE GitHub存储库的标准编写器列表中删除了BlobstoreOutputWriter,这使得事情变得更加复杂。我不得不写信给谷歌云商店,并从那里阅读。我编写了一个帮助器类,它为GoogleLoudStorageInputReader生成映射器参数。

class GCSMapperParams(base_html" target="_blank">handler.PipelineBase):

  def run(self, GCSPath):
    bucket_name = app_identity.get_default_gcs_bucket_name()
    return {
            "input_reader": {
                "bucket_name": bucket_name,
                "objects": [path.split('/', 2)[2] for path in GCSPath],
            }
        }

该函数将使用GoogleLoudStorageOutputWriter的一个MapReduce阶段的输出作为参数,并返回可以分配给下一个MapReduce阶段的mapper_params的字典。

基本上,第一个MapReduce阶段的输出值是一个包含 / /key/output-[i] 的列表,其中i是碎片的数量。为了使用GoogleCloudStorageInputReader,数据的键应该通过Mapper_params中的变量Objects传递。键的形式必须是key/output-[i],因此helper类只需从其中移除 / /

 类似资料:
  • Markdown 支持两种形式的链接语法: 行内式和参考式两种形式。 不管是哪一种,链接文字都是用 [方括号] 来标记。 要建立一个行内式的链接,只要在方块括号后面紧接着圆括号并插入网址链接即可,如果你还想要加上链接的 title 文字,只要在网址后面,用双引号把 title 文字包起来即可,例如: This is [an example](http://example.com/ "Title")

  • 内部链接 <sect1 id="target"锚点 外部链接 访问“内部链接”一节 参考<xref linkend="docbook-ln"/> [54] 脚注示例

  • 主要内容:尝试一下 - 实例,HTML 超链接(链接),HTML 链接语法,实例,HTML 链接 - target 属性,实例,HTML 链接- id 属性,实例,基本的注意事项 - 有用的提示,更多实例,HTML 链接标签HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。 尝试一下 - 实例 HTML 链接 如何在HTML文档中创建链接。 (可以在本页底端找到更多实例) HTML 超链接(链接) HTML使用标签 <a>来设

  • 主要内容:1. :link,2. :visited,3. :hover,4. :active链接是网站的重要组成部分,几乎在每个网页上都能看到不少的链接,合理的设计链接的样式能够给网页的颜值加分。链接有四种不同的状态,分别是 link、visited、active 和 hover,可以通过以下伪类选择器来为链接的四种状态设置不同的样式: :定义普通或未访问链接的样式; :定义已经访问过链接的样式; :定义当鼠标经过或悬停在链接上时的样式; :定义点击链接时的样式。 通过上面的四个伪类选择

  • 我只是想学习,构建一个Spring HATEOAS应用程序。 我已将自定义查询添加到我的存储库中: 我得到了很好的JSON响应,但由于这是可分页的,我想要一个链接部分。。。使用上一个/下一个。 我该如何添加它? 主url提供了所有客户的列表,链接没有问题,我只想将这些链接添加到自定义可分页方法。 --编辑-- 啊! 使findAllFitered方法返回一个页面而不是列表。。。

  • 在写 linux-insides 一书的过程中,我收到了很多邮件询问关于链接器和链接器脚本的问题。所以我决定写这篇文章来介绍链接器和目标文件的链接方面的知识。 如果我们打开维基百科的 链接器 页,我们将会看到如下定义: 在计算机科学中,链接器(英文:Linker),是一个计算机程序,它将一个或多个由编译器生成的目标文件链接为一个单独的可执行文件,库文件或者另外一个目标文件 如果你曾经用 C 写过至