如何创建空的PCollection<KV<String, Incident>>?解决编译报错
解决创建空PCollection<KV<String, Incident>>的编译错误
问题原因
你遇到的编译错误Cannot resolve method 'of(Class<KV>, Class<String>, Class<Incident>)',是因为TypeDescriptor.of()并不支持传入多个Class参数来指定泛型类的具体参数类型。KV作为泛型类,直接通过Class无法保留其泛型参数的类型信息,而你调用的多参数of()方法实际并不存在。
正确实现方式
方式一:使用Beam提供的TypeDescriptors工具类
Beam专门提供了TypeDescriptors类来简化泛型类型描述符的创建,针对KV类型可以直接用kv()方法:
import org.apache.beam.sdk.values.TypeDescriptors; PCollection<KV<String, Incident>> incidents = pipeline.apply("Create Empty Collection", Create.empty(TypeDescriptors.kv(String.class, Incident.class)));
方式二:使用匿名TypeDescriptor子类
通过创建TypeDescriptor的匿名子类,让编译器保留泛型类型的具体信息(避免类型擦除导致的信息丢失):
import org.apache.beam.sdk.values.TypeDescriptor; PCollection<KV<String, Incident>> incidents = pipeline.apply("Create Empty Collection", Create.empty(new TypeDescriptor<KV<String, Incident>>() {}));
说明
两种方式都能正确创建空的PCollection<KV<String, Incident>>,其中方式一更简洁,是Beam官方推荐的写法。
内容的提问来源于stack exchange,提问作者david7596
相关产品推荐
相关产品推荐

