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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – 如何在下载真实图像之前显示占位符图像?
- angularjs – 如何调用$scope $apply()使用“controller as
- 关键字的Angular 2强制自定义验证
- scala – Stackable Traits Pattern:方法的实现“需要`抽象
- LDAP结构:dc = example,dc = com vs o =示例
- 在Scala中的类字段中查找合成成员
- angularjs – 量角器Js运行到linux机器
- 使用AngularJS和JQuery的情况
- angularjs – 如何对集合中的项目进行Restangularize离开父
- AngularJS在大型单页面应用中的性能优化(一)