加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在Apache Flink中获取分区程序?

发布时间:2020-12-16 19:23:44 所属栏目:安全 来源:网络整理
导读:我们正在尝试为Apache Flink创建一个扩展,它使用自定义分区.对于某些操作符,我们希望检查/检索使用过的分区程序.不幸的是,我找不到任何可能在给定的DataSet上执行此操作.我是否遗漏了某些内容或是否有其他解决方法? 我会从这样的事情开始: class MyPartiti
我们正在尝试为Apache Flink创建一个扩展,它使用自定义分区.对于某些操作符,我们希望检查/检索使用过的分区程序.不幸的是,我找不到任何可能在给定的DataSet上执行此操作.我是否遗漏了某些内容或是否有其他解决方法?

我会从这样的事情开始:

class MyPartitioner[..](..) extends Partitioner[..] {..}
[..]
val myP = new MyPartitioner(...)
val ds = in.partitionCustom(myP,0)

现在从另一个类我想访问分区器(如果已定义).在Spark中我会按以下方式执行:

val myP = ds.partitioner.get.asInstanceOf[MyPartitioner]

然而,对于Flink我找不到这种可能性.

EDIT1:

似乎有可能使用suggestion of Fabian.但是,有两个限制:

(1)使用Scala时,必须先检索底层Java DataSet,然后将其转换为PartitionOperator

(2)分区必须是最后一次操作.因此,在设置和获取分区程序之间不能使用其他操作.例如.以下是不可能的:

val in: DataSet[(String,Int)] = ???

val myP = new MyPartitioner()
val ds = in.partitionCustom(myP,0)
val ds2 = ds.map(x => x)

val myP2 = ds2.asInstanceOf[PartitionOperator].getCustomPartitioner

感谢你并致以真诚的问候,
菲利普

解决方法

您可以将返回的DataSet强制转换为PartitionOperator并调用PartitionOperator.getCustomPartitioner():

val in: DataSet[(String,0)

val myP2 = ds.asInstanceOf[PartitionOperator].getCustomPartitioner

注意

> getCustomPartitioner()是一种内部方法(即,不是公共API的一部分),可能会在Flink的未来版本中发生变化.> PartitionOperator还用于其他分区类型,例如DataSet.partitionByHash().在这些情况下,getCustomPartitioner()可能会返回null.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读