我想像这样在stream.map()
中使用一个不可序列化的对象
stream.map { i =>
val obj = new SomeUnserializableClass()
obj.doSomething(i)
}
它非常低效,因为我创建了许多一些UnseralizableClass
实例。实际上,它只能在每个工作器中创建一次。
在Spark中,我可以使用mapPartition来执行此操作。但在flink stream api中,我不知道。
如果您正在处理一个不可序列化的类,我建议您创建一个RichFunction。在您的情况下是RichMapFunction。
Flink中的富操作符有一个open方法,该方法作为初始值设定项在taskmanager中执行一次。
因此,诀窍是使您的字段是瞬态的,并在您的open方法中实例化它。
检查下面的示例:
public class NonSerializableFieldMapFunction extends RichMapFunction {
transient SomeUnserializableClass someUnserializableClass;
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
this.someUnserializableClass = new SomeUnserializableClass();
}
@Override
public Object map(Object o) throws Exception {
return someUnserializableClass.doSomething(o);
}
}
那么您的代码将如下所示:
stream.map(new NonSerializableFieldMapFunction())
P、 D:我使用的是java语法,请将其改编为scala。
问题内容: 我喜欢整个WMI概念,并且可以在Linux(在某些脚本中)中真正使用它。Linux系统有类似的东西吗? 问题答案: 并不是的。您是否正在使用WMI获取系统参数,查询过程,更改配置或监视系统事件,等等? 内核通过和文件系统公开了许多信息和可调旋钮。没有查询语言,只有目录和文件的组织层次结构。其中一些文件是只读,读写或只写的。其中一些人有能力。 有些服务可能具有动态自定义客户查询和更新配置
问题内容: 在C#中,您可以将一个类标记为,以便只能从同一包中对其进行访问。Java有什么类似的东西吗? 问题答案: 您可以通过从类的声明中省略安全修饰符(公共,私有)来创建程序包专用类。
问题内容: 是否有与Java或JVM语言的Python virtualenv类似的东西? 问题答案: 据我了解,virtualenv使您能够拥有单独的库安装路径,从而有效地分隔“虚拟” Python安装。 Java没有“系统范围内已安装”库(*)的概念:它总是在类路径中搜索要加载的库。由于可以为每个应用程序定义类路径(并且需要将其定义!),因此每个应用程序都可以选择要加载的库和版本。 如果您更深入
问题内容: Java中是否有内置方法来查找任何数据类型的大小?有什么方法可以找到尺寸? 问题答案: 否。标准Java SE类库中没有这种方法。 设计者的观点是Java不需要它,因为该语言使应用程序1无需知道需要为原始值,对象或具有给定数量的元素的数组保留多少空间。 您可能会认为sizeof运算符对需要了解其数据结构占用多少空间的人很有用。但是,您还可以使用Java内存分析器简单,可靠地获得此信息以
问题内容: Python具有不错的功能。是否有等效的PHP? 问题答案: 只要所有数组的长度相同,就可以将with 作为第一个参数使用。 如果某些数组较短,则将使用null填充最长数组的长度,这与python不同,返回的结果是最短数组的长度。
问题内容: 开始使用C#学习LINQ。 尤其是LINQ to Objects和LINQ to XML。 我真的很喜欢LINQ的强大功能。 我了解到有一种叫做JLINQ的JavaScript实现。 此外(如Catbert所言),Scala将具有LINQ 您知道LINQ或类似的东西是否将成为Java 7的一部分吗? 更新:2008年的有趣帖子-LINQ forJava工具 问题答案: 看一下Scala