1

マップマッチングに関するこのオープンブックから例を取得しようとしています。私はscala 2.10とspark 2.0.2を使用しています。

残念ながら、構文と機能が変更されました。

case class NodeEntry(nodeId: Long, latitude: Double, longitude: Double, tags: Array[String])

val nodeDS = nodes.map{node => 
NodeEntry(node.getId, 
   node.getLatitude, 
   node.getLongitude, 
   node.getTags.map(_.getValue).toArray
)}.toDS.cache

「値マップは java.util.List[org.openstreetmap.osmosis.core.domain.v0_6.WayNode] のメンバーではありません」というエラーが表示されます

および「値 toDS は scala.collection.mutable.ArrayBuffer[Nothing] のメンバーではありません。考えられる原因: 「値 toDS」の前にセミコロンがない可能性がありますか?」

nodes.map を次のように変更しようとしました。

val nodeDS = nodes.map { node => 
  NodeEntry(node.getId, 
      node.getLatitude, 
      node.getLongitude, 
      node.getTags.toArray() 
  )}

しかし、その後、このエラーが発生します: タイプの不一致。found : Array[Object] required: Array[String] 注: Object >: String ですが、クラス Array は型 T で不変です。_ >: String などのワイルドカード型を調べたい場合があります。(SLS 3.2.10)

4

2 に答える 2

0

map利用可能にするためにJavaコレクションでは利用できませんimport JavaConversions

import scala.collection.JavaConversions._

スカラ REPL

scala> val l = new java.util.ArrayList[String]()
l: java.util.ArrayList[String] = []

scala> l.add("scala")
res0: Boolean = true

scala> l.add("haskell")
res1: Boolean = true

scala> l.map(x => x.reverse)
<console>:13: error: value map is not a member of java.util.ArrayList[String]
       l.map(x => x.reverse)
     ^

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> l.map(x => x.reverse)
res3: scala.collection.mutable.Buffer[String] = ArrayBuffer(alacs, lleksah)

マップをインポートした後、Java ArrayList で使用できるようになったことに注意してください。

于 2016-12-08T10:08:00.587 に答える