Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 尝试强制转换坐标矩阵时强制转换异常_Scala_Apache Spark_Rdd - Fatal编程技术网

Scala 尝试强制转换坐标矩阵时强制转换异常

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

嗨,我是Scala和Spark的新手。我正在编写一个测试来检查数据的完整性。为此,我有一个协调矩阵,并将其与结果映射。现在在我的测试方法中,我需要从结果映射中获取它,并将类型转换为坐标,因为它在线程中引发了异常 “main”java.lang.ClassCastException:scala。有些不能转换为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")
         })

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
类型,您能否建议阅读有关地图和其他方法的任何文档或链接