等级类型不匹配渗透
scala type mismatch osmosis
我尝试让 this open book about map matching 中的示例起作用。我正在使用 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
我收到错误 "value map is not a member of java.util.List[org.openstreetmap.osmosis.core.domain.v0_6.WayNode]"
和
"value toDS is not a member of scala.collection.mutable.ArrayBuffer[Nothing] possible cause: maybe a semicolon is missing before `value 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,但是 class Array 在类型 T 中是不变的。您可能希望研究通配符类型,例如 _ >: String。 (SLS 3.2.10)
map
在 Java 集合中不可用,以便使其可用 import JavaConversions
import scala.collection.JavaConversions._
例子
Scala 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
上使用
啊,我知道了。在建议的导入之后,以下工作:
val nodeDS = nodes.map { node =>
NodeEntry(node.getId,
node.getLatitude,
node.getLongitude,
node.getTags.map(_.getValue).toArray
)}
我尝试让 this open book about map matching 中的示例起作用。我正在使用 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
我收到错误 "value map is not a member of java.util.List[org.openstreetmap.osmosis.core.domain.v0_6.WayNode]"
和 "value toDS is not a member of scala.collection.mutable.ArrayBuffer[Nothing] possible cause: maybe a semicolon is missing before `value 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,但是 class Array 在类型 T 中是不变的。您可能希望研究通配符类型,例如 _ >: String。 (SLS 3.2.10)
map
在 Java 集合中不可用,以便使其可用 import JavaConversions
import scala.collection.JavaConversions._
例子
Scala 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
上使用啊,我知道了。在建议的导入之后,以下工作:
val nodeDS = nodes.map { node =>
NodeEntry(node.getId,
node.getLatitude,
node.getLongitude,
node.getTags.map(_.getValue).toArray
)}