GroupByKey来填充值,然后取消对apachebeam的分组



我有csv文件,每个主键组成的组都缺少值(对于每个组,只有一个字段填充了一个值,我需要为组的所有记录填充该字段(。我正在用apachebeam处理整个文件,因此,我想使用GroupByKey来填充每个组的字段,然后取消分组以恢复原始数据,现在是填充的数据。大熊猫的情况相当于:

dataframe[column_to_be_filled] = dataframe.groupby(primary_key)[column_to_be_filled].ffill().bfill()

我不知道如何使用apachebeam来实现这一点。我第一次使用apachebeam数据帧,但这需要大量内存。

最好用pcollection而不是数据帧来处理元素,以避免内存问题。

首先将CSV作为pcollection读取,然后可以使用GroupByKey处理分组的元素,并通过单独的转换生成结果。

可能是类似的东西

(pcollection | 'Group by key' >> beam.GroupByKey()
| 'Process grouped elements' >> beam.ParDo(UngroupElements()))

输入pcollection应该是元组列表,每个元组都包含要分组的键和元素。

ptransformation看起来是这样的:

class UngroupElements(beam.ParDo):

def process(element):
k, v = element
for elem in list(v):
# process your element 
yield elem

您可以尝试在Beam中使用与Pandas完全相同的代码:https://beam.apache.org/documentation/dsls/dataframes/overview/

您可以使用read_csv将数据读取到数据帧中,然后应用与Pandas中相同的代码。并非所有Pandas操作都得到支持(https://beam.apache.org/documentation/dsls/dataframes/differences-from-pandas/),但按键分组的特定情况应该有效。

最新更新