如何在Apache Beam中一起使用MapElements和KV?

玉置樱

我想做类似的事情:

PCollection<String> a = whatever;
PCollection<KV<String, User>> b = a.apply(
        MapElements.into(TypeDescriptor.of(KV<String, User>.class))
        .via(s -> KV.of(s, new User(s))));

其中User是一个自定义数据类型,带有Arvo编码器和一个将字符串考虑在内的构造函数。

但是,出现以下错误:

无法从参数化类型中选择

我尝试将其更改为TypeDescriptor.of(KV.class),但随后得到:

不兼容的类型;必需的PCollection>,但是将“ apply”推断为OutputT:不存在类型变量的实例,因此PCollection符合PCollection>

那我该怎么KVMapElements呢?

我知道我想做的事是可行的,ParDo因为我可以通过清除来明确指定如何进行类型擦除,new DoFn<String, KV<String, User>>ParDo不支持lambda函数。当我们使用Java 8时,这似乎不太优雅。

Lukasz Cwik:

由于在编译过程中Java中的类型擦除,由于类型变量已被擦除,因此KV<String, User>.class在转换过程中转换为,KV.class并且在运行时KV.class信息不足以推断编码器。

要解决此限制,您需要使用一种在编译后保留类型信息的机制。例如,您可以使用:

TypeDescriptors.kvs(TypeDescriptors.strings(), TypeDescriptor.of(User.class))

这与提供您自己的匿名类相同:

new TypeDescriptor<KV<String, User>> {}

提供绑定了类型变量的匿名类是当前在Java中解决类型擦除的方法之一。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Amazon EC2中一起运行Node和apache?

如何在Apache Beam Java中将TestStreams与MultiOutput类一起使用

如何在while和foreach循环中一起使用PHP和MySQL?

如何在 Swift iOS 中一起使用 UITableView 和 NSLink?

如何在PHP中一起使用复选框和输入类型编号

如何在SQL Server中一起使用相等和不相等

如何在for循环中一起使用innerHTML和ejs?

如何在 MongoDB 中一起使用 match 和 sum?

如何在Verilog中一起使用inout和reg

如何在python中一起使用.join()和.format()

如何在熊猫中一起使用distinct和where子句?

我如何在React中一起使用'update'和setState(prevState)?

如何在Google表格中一起使用to_date和IFERROR?

如何在 Pandas 中一起使用 groupby、select、count(*) 和 SQL 的 where 命令

如何在Bash中一起使用watch和jobs命令?

如何在输入中一起使用 :value 和 v-model

如何在Python中一起使用filter,group by和agg函数

如何在SQL Server中一起使用count,case和Distinct

如何在laravel中一起使用whereBetween和like运算符?

如何在SQL中一起使用IN子句和AND子句

如何在Scrapy中一起使用http和https代理?

您如何在Groovy中一起使用GroupBy和Sum?

如何在SQL Server查询中一起使用LIKE和NOT LIKE

如何在angular 1中一起使用ng-if和ng-options

如何在SQL中一起使用数据透视和分组依据?

如何在Redis中一起使用复制和分片?

如何在适配器类和活动中一起使用Interface

如何在Powerapps中一起使用collect和if函数?

如何在Ansible中一起使用loop和with_nested