资讯专栏INFORMATION COLUMN

Apache beam其他学习记录

jasperyang / 3342人阅读

摘要:与用于与的转换。其中方法返回的是在中的位置下标。对于设置了多个触发器的,自动选择最后一个触发的结算结果。其他不是线程安全的,一般建议处理方法是幂等的。

Combine与GroupByKey

GroupByKey是把相关key的元素聚合到一起,通常是形成一个Iterable的value,如:

cat, [1,5,9]
dog, [5,2]
and, [1,2,6]

Combine是对聚合后的Iterable进行处理(如求和,求均值),返回一个结果。内置的Combine.perKey()方法其实是GroupByKey和Combine的结合,先聚合和处理。
Beam中还有许多内置的处理类,比如Sum.integersPerKey(),Count.perElement()等
在全局窗口下,对于空输入,Combine操作后一般会返回默认值(比如Sum的默认返回值为0),如果设置了.withoutDefault(),则返回空的PCollection。
在非全局窗口下,用户必须指明空输入时的返回类型,如果Combine的输出结果要作为下一级处理的输入,一般设置为.asSingletonView(),表示返回默认值,这样即使空窗口也有默认值返回,保证了窗口的数量不变;如果设置了.withoutDefault(),则空的窗口返回空PCollection,一般作为最后的输出结果。

Platten与Patition

用于PCollection与PCollectionList的转换。
官方文档给的Platten代码很容易理解:

// Flatten takes a PCollectionList of PCollection objects of a given type.
// Returns a single PCollection that contains all of the elements in the PCollection objects in that list.
PCollection pc1 = ...;
PCollection pc2 = ...;
PCollection pc3 = ...;
PCollectionList collections = PCollectionList.of(pc1).and(pc2).and(pc3);

PCollection merged = collections.apply(Flatten.pCollections());

将一个PCollectionList={ PCollection{String1}, PCollection{String2}, PCollection{String3} }转换为一个PCollection={String1, String2, String3}.
而Patition刚好反过来,要将PCollection转换为PCollectionList需要指明分成的list长度以及如何划分,因此需要传递划分长度size和划分方法Fn。

// Split students up into 10 partitions, by percentile:
PCollectionList studentsByPercentile =
    students.apply(Partition.of(10, new PartitionFn() {
        public int partitionFor(Student student, int numPartitions) {
            return student.getPercentile()  // 0..99
                 * numPartitions / 100;
        }}));

其中partitionFor()方法返回的是在PCollectionList中的位置下标。

Side Input

不能使用硬编码数据,通常是转换中间产生的数据。一般用于跟主输入数据进行比较,因此要求Side Input数据的窗口要与主输入数据的窗口尽量一致,如果不一致,Beam会尽可能地从Side Input中找到合适的位置的数据进行比较。对于设置了多个触发器的Side Input,自动选择最后一个触发的结算结果。

附属输出数据 Additional Outputs

这一部分官方的代码已经写得很清楚,看代码即可。

数据编码

在Pipeline的数据处理过程中经常需要对数据元素进行字节转换,因此需要制定字节转换的编码格式。对于绝大部分类型的数据,Beam都提供了默认的编码类型,用户也可以通过SetCoder指定编码类型。
1)从内存读取的输入数据一般要求用户指定其编码类型;
2)用户自定义的类对象一般要求用户指定其编码类型,或者可以在类定义上使用@DefaultCoder(AvroCoder.class)指定默认编码类型。

其他:

Beam不是线程安全的,一般建议处理方法是幂等的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67678.html

相关文章

  • Apache Beam采坑系列——KafkaIO

    摘要:最近在用做流上的异常检测,期间遇到了很多问题,但是发现网上相关的资料很少,基本只能自己啃文档和瞎尝试。其中如有错漏,欢迎指出。即从一条数据中获得时间戳,然后以的格式返回。丢弃掉中的附加信息使用这一设置时,得到的中的元素是的和组成的键值对。 最近在用Apache beam做流上的异常检测,期间遇到了很多问题,但是发现网上相关的资料很少,基本只能自己啃文档和瞎尝试。所以想把自己踩过的坑记录...

    iliyaku 评论0 收藏0
  • Apache Beam学习笔记——几种常见的处理类Transform

    摘要:要说在中常见的函数是哪一个,当然是。是一个实现了接口的抽象类,其中是数据处理方法,强制子类必须实现。以上为学习一天的总结,有错误欢迎指正。相同的是这个方法处理的都是中的一个元素。 在阅读本文前,可先看一下官方的WordCount代码, 对Apache Beam有大概的了解。 要说在Apache Beam中常见的函数是哪一个,当然是apply()。常见的写法如下: [Final Outp...

    Chiclaim 评论0 收藏0
  • Apache Beam的分窗与触发器

    摘要:需要注意的是和方法生成的触发器是连续的而不是一次性的。其他的还有一次性触发器将一次性触发器变为连续型触发器,触发后再次等待触发。例如与一起用可以实现每个数据到达后的分钟进行处理,经常用于全局窗口,可以用触发器来设置停止条件。 本文参考Apache Beam官方编程手册 可以结合官方的Mobile Game 代码阅读本文。 在默认情况下,Apache Beam是不分窗的,也就是采用Gl...

    NickZhou 评论0 收藏0
  • Apache Beam访问HDFS

    摘要:一直接访问引入的相关包使用代替给指定配置与访问本地文件一样访问文件实际测试中发现本地如能够成功读写,但是集群模式下如读写失败,原因未知。二通过访问除了直接读写的数据,还可以通过来进行读写。 一、直接访问 1.引入HDFS的相关jar包: org.apache.beam beam-sdks-java-io-hadoop-file-system 2.1.0...

    UCloud 评论0 收藏0
  • ApacheCN 学习资源汇总 2019.1

    摘要:主页暂时下线社区暂时下线知识库自媒体平台微博知乎简书博客园我们不是的官方组织机构团体,只是技术栈以及的爱好者合作侵权,请联系请抄送一份到基础编程思想和大数据中文文档中文文档中文文档中文文档中文文档中文文档中文文档中文文档中文文档中文文档区块 【主页】 apachecn.org 【Github】@ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台 ...

    cheng10 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<