java如何调用FileIO。写Scala中的via(Contextful,Contextful)
我将ApacheBeam与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)
这里有什么问题
谢谢
# 1 楼答案
Scala的类型推断系统和重载解析系统不能很好地协同工作。在这种情况下,via()函数的重载会阻止类型推断正常工作Why does scala fail to compile when method is overloaded in a seemingly unrelated way?对这个问题有很好的解释
在本例中,您只需要更改第二个Contextful的类型参数。fn到[String,FileIO.Sink],使其与所需重载的签名匹配