【问题标题】:Why I get type mismatch in scala Spark?为什么我在 scala Spark 中出现类型不匹配?
【发布时间】:2018-05-22 08:07:30
【问题描述】:

首先,我读取一个文本文件并将其转换为 RDD[(String,(String,Float))]:

val data = sc.textFile(dataInputPath);
val dataRDD:RDD[(String,(String,Float))] = data.map{f=> {
      val temp=f.split("//x01");
      (temp(0),(temp(1),temp(2).toInt ) );
      }
    } ;

然后,我运行以下代码将我的数据转换为 Rating 类型

import org.apache.spark.mllib.recommendation.Rating
val imeiMap = dataRDD.reduceByKey((s1,s2)=>s1).collect().zipWithIndex.toMap;
val docidMap = dataRDD.map( f=>(f._2._1,1)).reduceByKey((s1,s2)=>s1).collect().zipWithIndex.toMap;
val ratings = dataRDD.map{case (imei, (doc_id,rating))=> Rating(imeiMap(imei),docidMap(doc_id),rating)};

但我得到了一个错误:

Error:(32, 77) type mismatch;
 found   : String
 required: (String, (String, Float))
    val ratings = dataRDD.map{case (imei, (doc_id,rating))=> Rating(imeiMap(imei),docidMap(doc_id),rating)};

为什么会这样?我认为string 已经更改为(String, (String, Float))

【问题讨论】:

    标签: scala apache-spark apache-spark-mllib


    【解决方案1】:

    docidMap的key不是String,是Tuple(String, Int)

    这是因为您在 .toMap 方法之前有 zipWithIndex:

    将此 rdd 作为快速测试的输入:

    (String1,( String2,32.0))
    (String1,( String2,35.0))
    
    
    
    scala> val docidMap = dataRDD.map( f=>(f._2._1,1)).reduceByKey((s1,s2)=>s1).collect().zipWithIndex.toMap;
    docidMap: scala.collection.immutable.Map[(String, Int),Int] = Map((" String2",1) -> 0)
    
    
    val docidMap = dataRDD.map( f=>(f._2._1,1)).reduceByKey((s1,s2)=>s1).collect().toMap;
    docidMap: scala.collection.immutable.Map[String,Int] = Map(" String2" -> 1)     
    

    您的imeiMap 也会发生同样的情况,看来您也只需从那里删除zipWithIndex

    val imeiMap = dataRDD.reduceByKey((s1,s2)=>s1).collect.toMap
    

    【讨论】:

      【解决方案2】:

      这不是关于你的dataRDD,而是关于imeiMap

      imeiMap: scala.collection.immutable.Map[(String, (String, Float)),Int] 
      

      【讨论】:

        猜你喜欢
        • 2010-12-13
        • 2017-02-09
        • 2021-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 2020-01-12
        • 2013-03-11
        相关资源
        最近更新 更多