簡體   English   中英

如何從PCollection Apache Beam Python創建N個元素組

[英]How to create groups of N elements from a PCollection Apache Beam Python

我試圖完成這樣的事情: 在Beam / Dataflow中批量PCollection

上面鏈接的答案是Java,而我正在使用的語言是Python。 因此,我需要一些幫助來獲得類似的結構。

具體來說我有這個:

 p = beam.Pipeline (options = pipeline_options)
 lines = p | 'File reading' >> ReadFromText (known_args.input)

在此之后,我需要創建另一個PCollection但有List的“行”,因為我的使用情況下,N行需要一組行。 我無法逐行操作。

我嘗試使用ParDo函數,使用變量計數與計數器N行相關聯,並在groupBy之后使用Map 但是每1000條記錄重置一次,所以這不是我要找的解決方案。 我在鏈接中閱讀了這個例子,但我不知道如何在Python中做這樣的事情。

我嘗試在Datastore中保存計數器,但是,Dataflow讀取和寫入數據存儲之間的速度差異非常大。

這樣做的正確方法是什么? 我不知道如何接近它。 問候。

假設分組順序不重要,您可以在DoFn

class Group(beam.DoFn):
  def __init__(self, n):
     self._n = n
     self._buffer = []

  def process(self, element):
     self._buffer.append(element)
     if len(self._buffer) == self._n:
        yield list(self._buffer)
        self._buffer = []

  def finish_bundle(self):
     if len(self._buffer) != 0:
        yield list(self._buffer)
        self._buffer = []

lines = p | 'File reading' >> ReadFromText(known_args.input)
          | 'Group' >> beam.ParDo(Group(known_args.N)
          ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM