scala - 尝试投射坐标矩阵时出现投射异常
问题描述
嗨,我对 Scala 和 Spark 很陌生。我正在编写一个测试来检查我的数据的完整性。为此,我有一个坐标矩阵,并用 ResultMap 映射它。现在在我的测试方法中,我需要从结果映射中获取它并将类型转换为 Coordinate 它在线程“main”java.lang.ClassCastException 中引发了一个异常:scala.Some 无法转换为 org.apache.spark.mllib.linalg .distributed.CoordinateMatrix
这是我的代码。
def SinghTest(map:Map[String,Any ]):Boolean={
var res:Boolean=false // false
val connection= DriverManager.getConnection("Connectionstring ")
val statement = connection.createStatement();
val rs = statement.executeQuery("select A,B from Demo P" +
" join Demo_REL R on p.id=R.ID " +
"join Cpu CN on CN.id=R.CID" +
" limit 10 ");
/***
* Maping with ResultMap
***/
val matrix=map.get("MatrixEntries").asInstanceOf[CoordinateMatrix]
matrix.entries.take(10).foreach(x=> {
val ph=x.i
val ch=x.j
val pid=rs.getLong(1)
val cid=rs.getLong(2)
if((ph!=pid)&&ch!=cid)
throw new Exception("Fail")
})
解决方案
地图上的get
方法不直接返回元素,而是其中的一个Option
。这意味着,对于Map[String, Any]
结果类型是Option[Any]
. 选项可以包含一个值或为空;如果您的地图包含键,您将获得Some
带有值的 a ,否则为 a None
。然后,您可以使用 on 方法对该值进行操作,Option
或者通过 获取它getOrElse
,如果它是 a ,则使用默认值None
。
val matrix = map.getOrElse("MatrixEntries", someDefaultMatrix).asInstanceOf[CoordinateMatrix]
如果您确定地图包含键,则可以使用 直接访问元素map(key)
,只需省略.get
. 这将直接为您提供元素,但如果未为您的地图定义键,则会引发异常。
val matrix = map("MatrixEntries").asInstanceOf[CoordinateMatrix]
PS:请注意,使用Any
通常被认为是不好的风格,因为它会丢弃任何类型安全性。如果您的地图包含一组大部分固定的键并且您可以控制它的创建(即它不是来自库),请考虑用案例类替换它:
case class TestData(matrixEntries: CoordinateMatrix /* further elements here */)
// ...
val matrix = testData.matrixEntries // no casting required, type errors checked at compile time
推荐阅读
- ember.js - 在我的组件内的操作中使用 fetch
- php - 如何做一个将找到两列的sql总和的结果和行?
- javascript - Vue TypeError _vm 不是函数
- java - XMPP 服务器。如何打开 TLS 连接?
- rust - cargo-clone 和 cargo-edit 不在我的 Windows 10 PC 上构建
- reactjs - React 16 中的事件监听器和引用
- javascript - 检查表示 HTML 的文本中的 body 标记是否为空
- php - 动态创建对象实例名称
- mongodb - 无法连接到工作的 Dockerized Mongo ReplSet
- c# - BouncyCastle 中的 Blowfish 仅加密前 8 个字节