java - 如何在 Scala 中调用 FileIO.Write.via(Contextful, Contextful)
问题描述
我正在使用带有 Scala 的 Apache Beam。要为不同类型的流数据创建具有各自架构的新实例,ParquetIO.Sink
我正在尝试调用.via(Contextful, Contextful)
. FileIO.Write
但是,IntelliJ 找不到我尝试使用的重载方法并引发此错误:Cannot resolve overloaded method 'via'
.
FileIO
.writeDynamic[String, DeserializedEvent]()
.by(new UDFs.PartitionByEventName())
.withDestinationCoder(StringUtf8Coder.of())
.withNumShards(numShards)
.withNaming(new UDFs.NameFiles())
.via(
Contextful.fn[DeserializedEvent, GenericRecord](
new UDFs.EventToGenericRecord() // SerializableFunction[DeserializedEvent, String]
),
Contextful.fn[String, ParquetIO.Sink](
new UDFs.SinkParquet() // SerializableFunction[String, ParquetIO.Sink]
)
)
.to(path)
这里有什么问题?
谢谢
解决方案
Scala 的类型推断系统和重载解析系统不能完美地协同工作。在这种情况下,via() 函数的重载会阻止类型推断正常工作。 当方法以看似不相关的方式重载时,为什么 scala 无法编译?对问题有很好的解释。
在您的情况下,您只需要将第二个 Contextful.fn 的类型参数更改为 [String, FileIO.Sink] 以使其与所需重载的签名相匹配。
推荐阅读
- kubernetes - 无法通过 traefik 反向代理访问我的 Kubernetes 服务
- python - 为什么 list.sort() 不起作用,但 sorted() 在这种情况下对给定列表工作正常
- objective-c - 尝试在我的 macOS Sierra 10.12.6 中安装 Homebrew 时出现 ssh_exchange_identification 问题
- python - PySpark:从随机均匀分布创建数据帧
- date - 在 VueJS 中格式化日期。后端到前端
- python - 将任意数量列表的元素加入一个字符串列表python
- javascript - 在javascript中替换时不要将方括号视为字符类
- powershell - 替换图片文件中的IPTC关键字
- powershell - 循环遍历二维数组(foreach)时的令人困惑的行为
- vb.net - 我在我的文档上传器代码中做错了什么?