![](/img/trans.png)
[英]Apache Beam - Python : How to get the top 10 elements of a PCollection with Accumulation?
[英]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.