如何在 Scala 中调用 FileIO.Write.via(Contextful, Contextful)
How to call FileIO.Write.via(Contextful, Contextful) in Scala
我正在将 Apache Beam 与 Scala 结合使用。要为不同类型的流数据创建具有各自模式的新 ParquetIO.Sink
实例,我试图在 FileIO.Write
上调用 .via(Contextful, Contextful)
。但是,IntelliJ 找不到 overloaded method that I'm trying to use 并引发此错误: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() 函数的重载会阻止类型推断正常工作。 对问题的解释很好
在您的情况下,您只需要将第二个 Contextful.fn 的类型参数更改为 [String, FileIO.Sink] 以使其与所需重载的签名相匹配。
我正在将 Apache Beam 与 Scala 结合使用。要为不同类型的流数据创建具有各自模式的新 ParquetIO.Sink
实例,我试图在 FileIO.Write
上调用 .via(Contextful, Contextful)
。但是,IntelliJ 找不到 overloaded method that I'm trying to use 并引发此错误: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() 函数的重载会阻止类型推断正常工作。
在您的情况下,您只需要将第二个 Contextful.fn 的类型参数更改为 [String, FileIO.Sink] 以使其与所需重载的签名相匹配。