【问题标题】:Convert java to scala code将java转换为scala代码
【发布时间】:2018-09-23 17:32:30
【问题描述】:

将 java 转换为 scala 代码我遇到了一个奇怪的问题 一个例子可以在这里找到https://gist.github.com/geoHeil/895260a04d3673b9848b345edf388a2d 错误是

[error] src/main/scala/myOrg/CustomInputMapperWKT.scala:17: overriding method call in trait FlatMapFunction of type (x$1: String)java.util.Iterator[Any];
[error]  method call has incompatible type
[error]   override def call(line: String): Iterator[_] = {

尝试将 spark java 转换为 spark scala API 时 我正在努力将这个 java 类 https://github.com/DataSystemsLab/GeoSpark/blob/master/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPolygonMapper.java#L59-L81 移植到 scala。

在哪里

class CustomInputMapperWKT extends FlatMapFunction[String, Any] {
....
override def call(line: String): Iterator[_] = {
val result: collection.Seq[Polygon] with Growable[Polygon] = mutable.Buffer[Polygon]()
result.iterator
  }
}

是描述问题的最小样本。

编辑

为了解决可能的打字问题,我将 Any 替换为相应的多边形类型。 但这无助于解决问题。

【问题讨论】:

    标签: java scala apache-spark


    【解决方案1】:

    你试过这个签名吗?

    override def call(t: String): java.util.Iterator[Any] = {
    ...
    

    因为这个代码示例编译成功:

    import org.apache.spark.api.java.function.FlatMapFunction
    import collection.JavaConverters._
    
    class CustomInputMapperWKT extends FlatMapFunction[String, Any] {
      override def call(t: String): java.util.Iterator[Any] = {
        ...
        result.iterator.asJava
      }
    }
    

    【讨论】:

    • 这部分是正确的。现在的新问题是 val result: collection.Seq[Polygon] with Growable[Polygon] = mutable.Buffer[Polygon]() 当被称为 result.iterator 时不会产生 java.util.iterator 而是 type mismatch; [error] found : Iterator[com.vividsolutions.jts.geom.Polygon] [error] required: java.util.Iterator[com.vividsolutions.jts.geom.Polygon]
    • 你能像我一样使用JavaConverters吗? docs.scala-lang.org/overviews/collections/…
    • 当使用 val javaList: java.util.List[Polygon] = scala.collection.JavaConversions.seqAsJavaList(result) javaList.iterator() 时,它会编译,但这不是干净的 scala 代码。你看到替代品了吗?奇怪的是,隐式映射器不起作用。
    • 如果result.iterator.asJava的返回不起作用,现在很难说
    • 看起来像这样。奇怪。
    猜你喜欢
    • 2012-04-10
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2014-05-27
    相关资源
    最近更新 更多