markdown 对于ループの挙动について

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 对于ループの挙动について相关的知识,希望对你有一定的参考价值。

## Filterの挙動確認
### ソース
```
def run(args=None):
    pipeline = beam.Pipeline(options=PipelineOptions())
    kv = pipeline | beam.Create([("k001", ["v001", "v002", "v003"]), ("k002", ["v011", "v012", "v013"])])
    keys = ["k001", "k002"]
    for key in keys:
        (kv
         | "Filter: %s" % key >> beam.Filter(lambda (k, v): k == key)
         | "Map: %s" % key >> beam.Map(lambda (k, v): print(v))
         )
    
    result = pipeline.run()
    result.wait_until_finish()

if __name__ == '__main__':
    run()
```

### 出力結果
```
[INFO] 2017-11-21 15:35:57 root Running pipeline with DirectRunner.
['v011', 'v012', 'v013']
['v011', 'v012', 'v013']
[INFO] 2017-11-21 15:35:57 root Application Finish
```

`["v001", "v002", "v003"]` の行と、 `['v011', 'v012', 'v013']` の行が出るのかと思いきや
`['v011', 'v012', 'v013']` が2回出力された。keysの一番最後の値が使われる?

## keysの順番を変えてみる

### ソース
```
pipeline = beam.Pipeline(options=PipelineOptions())
kv = pipeline | beam.Create([("k001", ["v001", "v002", "v003"]), ("k002", ["v011", "v012", "v013"])])
keys = ["k002", "key001"]
for key in keys:
    (kv
     | "Filter: %s" % key >> beam.Filter(lambda (k, v): k == key)
     | "Map: %s" % key >> beam.Map(lambda (k, v): print(v))
     )

result = pipeline.run()
result.wait_until_finish()
```

### 出力結果
```
[INFO] 2017-11-21 15:48:03 root Running pipeline with DirectRunner.
['v001', 'v002', 'v003']
['v001', 'v002', 'v003']
[INFO] 2017-11-21 15:48:03 root Application Finish
```

keysの最後の値でFilterがかかっているもよう。

## べた書きの処理をTransformクラスにし、keyを引数で渡してみる
### ソース
```
from apache_beam.typehints import with_input_types, with_output_types, Tuple, List
@with_input_types(Tuple[str, List[str]])
@with_output_types(None)
class SampleTransform(beam.PTransform):
    def __init__(self, key):
        self.key = key

    def expand(self, pcoll):
        return (pcoll
                | beam.Filter(lambda (k, v): k == self.key)
                | beam.Map(lambda (k, v): print(v))
                )

pipeline = beam.Pipeline(options=PipelineOptions())
kv = pipeline | beam.Create([("k001", ["v001", "v002", "v003"]), ("k002", ["v011", "v012", "v013"])])
keys = ["k001", "k002"]

for key in keys:
    kv | key >> SampleTransform(key)

result = pipeline.run()
result.wait_until_finish()
```

### 出力結果
```
[INFO] 2017-11-21 15:54:06 root Running pipeline with DirectRunner.
['v001', 'v002', 'v003']
['v011', 'v012', 'v013']
[INFO] 2017-11-21 15:54:06 root Application Finish
```

できた。Transformクラスを作ってあげれば解決されるみたい。

以上是关于markdown 对于ループの挙动について的主要内容,如果未能解决你的问题,请参考以下文章

csharp 【C#】参考キーワードで参照型を参照渡しした时の挙动に关して

SAPの無償品の扱いについて

text データベース周りについて

text jqueryタブ同ページアンカーについて

ruby モジュールとインスタンス変数について

text GAEデプロイ时のエラー:AppEngineConfigException,MalformedByteSequenceExceptionについて