Pcollection p1 = {"a","b","c"}
PCollection< KV > p2 = p1.apply("some operation ")
//{(1,"a"),(2,"b"),(3,"c")}
我需要使其像Apache Spark这样的大型文件可扩展,以便它的工作方式如下:
sc.textFile("./filename").zipWithIndex
我的目标是通过以可伸缩的方式分配行号来保留大文件中行之间的顺序。
如何通过Apache Beam获得结果?
如果我理解你的算法,应该就像(伪代码):
A = ReadWithShardedLineNumbers(myFile) : output K, V
B = A.ExtractShardOffsetKeys() : output K, V
C = B.PerKeySum() : output K, V
D = C.GlobalSortAndPrefixSum() : output K V
E = [A,D].JoinAndCalculateGlobalLineNumbers() : output V
这有几个假设:
ReadWithShardedLineNumbers:源可以输出其分片偏移量,并且偏移量是全局排序的
GlobalSortAndPrefixSum:所有读取分片的总数可以适合内存以执行总排序
假设#2不适用于所有的数据大小,并且根据读取碎片的粒度不同而不同。但是对于一些实际的文件大小子集来说,这似乎是可行的。
另外,我认为上面的伪代码在Beam中可行,不需要SplittableDoFn。
没有内置的方法来做到这一点。PCollections在Beam中是无序的,可能是无界的,并且在多个工人上并行处理。PCollection直接在Beam模型中无法观察到来自具有已知顺序的源的事实。我认为更简单的方法是在Beam管道中使用之前对文件进行预处理。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。