java - 如何在 Scala 中调用 FileIO.Write.via(Contextful, Contextful)

标签 java scala apache-beam parquet

我将 Apache Beam 与 Scala 结合使用。要为不同类型的流数据创建具有各自模式的新 ParquetIO.Sink 实例,我试图在 上调用 .via(Contextful, Contextful)文件 IO.写入。但是,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() 函数的重载会阻止类型推断正常工作。 Why does scala fail to compile when method is overloaded in a seemingly unrelated way?对问题有很好的解释。

在您的情况下,您只需要将第二个 Contextful.fn 的类型参数更改为 [String, FileIO.Sink] 以使其与所需重载的签名相匹配。

关于java - 如何在 Scala 中调用 FileIO.Write.via(Contextful, Contextful),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66794112/

相关文章:

java - Android:在各个 TextView 中使用 stringrequest 的结果

java - 避免在eclipse中嵌入tomcat

scala - 使用 .ivy2 缓存的副本作为 SBT 解析器源

character-encoding - Apache Beam/GCP 数据流编码问题

java - Apache Beam 流式处理 json 数据

java - 使用 Apache Beam 将重复的字符串写入 BigQuery

python - Pyspark 错误 : "Py4JJavaError: An error occurred while calling o655.count." when calling count() method on dataframe

java - 我可以从内部类中的方法引用一个类吗?如果可以,如何引用?

function - Scala 风格 : how far to nest functions?

java - java.Clock 中的混淆,systemDefaultZone() 返回 UTC 时间