我想使用数据流采样静态数据源。我知道有一个Sample
转换,它允许您对固定数量的数据元组进行采样,但在我的用例中有所不同的是,根据实际的源大小,我的目标采样数是动态的。使用动态采样计数对采样进行采样
我知道有一种方法是,我可以首先计算我的数据源,计算我的抽样概率,并使用ParDo过滤我的pcollection,在每个DoFn内翻转硬币。
然而,一个缺点是尤其是当我的概率非常低(例如,如果我想从500M +池中挑选50个样本随机),它似乎不是很稳定。
所以我只是想知道,有没有更好的办法呢? (不知怎的,我认为这只是一些数据流的黑客,我不知道)
编辑:
遗憾的混乱。问题是我不知道预先来源的大小,他们可能范围从1M到500M,并根据我的实际大小,我想以不同的方式对它进行抽样,例如我的样本大小是min(actual_size,2.5e10 /( actual_size)),这使得当我的源码大小恰好为500M时,我只想要其中的50个。当我的实际大小为5M,我想品尝5000
我特别想知道: 是否有任何内置PTranform
,我可以用这个特定使用案例(比如我可以用Sample
只是一些解决方法吗?)
你可以分享更多关于你希望样本大小与输入大小相关的细节吗?从你的例子来看,你似乎可以选择一个50/500M的概率,而且应该做你想要的。 –