Google cloud dataflow 在数据流中将Write.to(Sink)中的输出碎片数设置为

Google cloud dataflow 在数据流中将Write.to(Sink)中的输出碎片数设置为,google-cloud-dataflow,Google Cloud Dataflow,我有一个定制的接收器,通过调用数据流中的PCollection.apply(write.to(MySink))来扩展FileBasedSink(非常简单)。然而,默认情况下,简单地调用Write.to总是会产生3个输出碎片?是否有任何方法可以仅在自定义接收器类定义中定义输出碎片的数量(如TextTO.Write.withNumShards)?或者我必须定义另一个定制的p变压器,比如TextIO.Write 不幸的是,现在FileBasedSink不支持指定碎片的数量 实际上,您获得的碎片数量将取

我有一个定制的接收器,通过调用数据流中的
PCollection.apply(write.to(MySink))
来扩展
FileBasedSink
(非常简单)。然而,默认情况下,简单地调用
Write.to
总是会产生3个输出碎片?是否有任何方法可以仅在自定义接收器类定义中定义输出碎片的数量(如
TextTO.Write.withNumShards
)?或者我必须定义另一个定制的
p变压器
,比如
TextIO.Write

不幸的是,现在
FileBasedSink
不支持指定碎片的数量

实际上,您获得的碎片数量将取决于框架如何选择优化生成您正在编写的集合的管道部分,因此基本上无法控制


我已提交您的请求,以便您可以订阅状态。

不幸的是,现在
FileBasedSink
不支持指定碎片的数量

实际上,您获得的碎片数量将取决于框架如何选择优化生成您正在编写的集合的管道部分,因此基本上无法控制


我已经提交了您的请求,以便您可以订阅状态。

谢谢jkff,啊,我想澄清一下,所有定制的接收器都不能支持控制输出碎片的数量吗?那么,在您看来,在当前情况下,使用我的定制接收器实现灵活数量的输出碎片的最佳途径是什么呢?我认为目前实现这一点的唯一途径是没有定制接收器API:通过ParDo{hash the data modulo numShards}GBK | ParDo来传输数据{将此碎片的数据写入临时文件;在finishBundle中,自动将其重命名为最终位置}。但是请注意,由于动态工作重新平衡,这在许多服务中也不起作用。对不起,我应该更清楚地说明我自己-最终ParDo应该是ParDo{(shardix,values)=>write“values”到一个临时文件,并在最后以原子方式将其重命名为final location}动态再平衡不会分割一个键的值,所以这会起作用。感谢jkff,啊,我想澄清一下,是不是所有定制的接收器都不能支持对输出碎片数量的控制?那么,在你看来,在当前点上,用我的定制接收器实现灵活数量的输出碎片的最佳途径是什么?我认为答案是肯定的目前实现这一点的唯一方法是不使用定制的sink API:通过ParDo{hash the data module numShards}| GBK | ParDo{将此碎片的数据写入临时文件;在finishBundle中,自动将其重命名为最终位置}。但是请注意,由于动态工作重新平衡,这在许多服务中也不起作用。对不起,我应该更清楚地说明自己-最终的ParDo应该是ParDo{(shardix,values)=>将“values”写入临时文件,最后以原子方式将其重命名为final location}。动态重新平衡不会分割键的值,因此这会起作用。