如何在Apache Beam中实现类似Spark的zipWithIndex?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

如何在Apache Beam中实现类似Spark的zipWithIndex?

社区小助手 2018-12-21 14:00:23 1329

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获得结果?

云服务器登录 云服务器设置
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:23:26

    如果我理解你的算法,应该就像(伪代码):

    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管道中使用之前对文件进行预处理。

    0 0
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

相似问题
最新问题