Scala 尝试强制转换坐标矩阵时强制转换异常
嗨,我是Scala和Spark的新手。我正在编写一个测试来检查数据的完整性。为此,我有一个协调矩阵,并将其与结果映射。现在在我的测试方法中,我需要从结果映射中获取它,并将类型转换为坐标,因为它在线程中引发了异常 “main”java.lang.ClassCastException:scala。有些不能转换为org.apache.spark.mllib.linalg.distributed.CoordinateMatrix 这是我的密码Scala 尝试强制转换坐标矩阵时强制转换异常,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,嗨,我是Scala和Spark的新手。我正在编写一个测试来检查数据的完整性。为此,我有一个协调矩阵,并将其与结果映射。现在在我的测试方法中,我需要从结果映射中获取它,并将类型转换为坐标,因为它在线程中引发了异常 “main”java.lang.ClassCastException:scala。有些不能转换为org.apache.spark.mllib.linalg.distributed.CoordinateMatrix 这是我的密码 def SinghTest(map:Map[String,A
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")
})
maps上的
get
方法不直接返回元素,而是它的选项。这意味着,对于Map[String,Any]
来说,结果类型是Option[Any]
。选项可以包含值,也可以为空;如果地图包含该键,您将获得一个带有该值的Some
,否则将获得一个None
。然后,您可以使用选项上的方法操作该值
,或通过getOrElse
获取该值,如果该值为无
,则使用默认值
val matrix=map.getOrElse(“MatrixEntries”,someDefaultMatrix)。作为[CoordinateMatrix]的实例
如果您确定映射包含键,则可以使用map(key)
直接访问元素,只需省去.get
。这将直接为您提供元素,但如果没有为映射定义键,则会引发异常
val matrix=map(“矩阵中心”)。作为[CoordinateMatrix]的实例
注意,使用Any
通常被认为是不好的风格,因为它会丢掉任何类型的安全性。如果您的地图包含一组基本固定的关键点,并且您可以控制其创建(即,它不是从库中创建的),请考虑使用case类替换它:
case类TestData(矩阵入口:CoordinateMatrix/*此处的其他元素*/)
// ...
val matrix=testData.matrixEntries//不需要强制转换,编译时检查类型错误
我是这样做的,是在@crather2150的帮助下完成的
val矩阵=映射(“矩阵中心”)。表示[CoordinateMatrix]//但是转换是必需的。我有另一个值要映射到结果,所以我不确定这是否是一个好方法?getOrElse不工作,它显示以下错误值项不是Any的成员如果您保留映射并使用getOrElse
,您仍然需要将其转换为asInstanceOf
,由于地图条目仍然是Any
类型,您能否建议阅读有关地图和其他方法的任何文档或链接