【问题标题】:Type mismatch found java.util.List[String]:required List[String]发现类型不匹配 java.util.List[String]:required List[String]
【发布时间】:2017-01-06 03:37:52
【问题描述】:

我对 scala 很陌生。我已经开始在我的 spark 项目中使用 scala。我正在使用一些java代码。以下行我收到错误。

         case class docDisplay( id :String,name :String,  session :String,
  time :String, docguid: scala.collection.immutable.List[String]

)

我的 ParseDocumentGuid 是 java 类的代码如下。

public static List<String> ParseGuid(String Data, String type,String Name) {    
    boolean validJson=checkValidJson(Data);
    if(validJson==true)

    {
        try
        {
            JSONObject  json = null;
         json = new JSONObject (Data);
        List<String> singleDocGuidList= new ArrayList<String>();
        if(json!=null && json.getString("guid").equalsIgnoreCase("guid") )
        {
                    singleDocGuidList.add(json.getString("guid"));
        }
         return singleDocGuidList;
    }    
    catch(Exception e)
       {
           List<String> singleDocGuidList= new ArrayList<String>();
            singleDocGuidList.add(e.getMessage());
            return singleDocGuidList;
       }
    }
 else
    {
        List<String> singleDocGuidList= new ArrayList<String>();
        singleDocGuidList.add("unKnownDocumentGuid");
        return singleDocGuidList;
    }
}

这是调用上述方法的代码

def selectColumnsPerDocdisplayRows(row:Row):List[String]= {
    docDisplay(
        row.getAs[String]("id"),
        row.getAs[String]("name"),
        row.getAs[String]("session"),
        row.getAs[String]("time"),
    Utils.ParseDocumentGuid(row.getAs("Data"),Utils.DOCDISRELATED,row.getAs[String]("name"))
        );
}

所以我在我的方法 def selectColumnsPerDocdisplayRows() 上遇到错误

类型不匹配;发现:java.util.List[String] 需要:List[String]

【问题讨论】:

标签: scala apache-spark scala-java-interop


【解决方案1】:

您好,感谢 Brian Kent 和 Chris Shain 的建议,我已经从我的 def 中删除了 List[String] 并且它可以与

导入集合.JavaConverters._

和.asScala.toList

 def selectColumnsPerDocdisplayRows(row:Row)= {
docDisplay(
    row.getAs[String]("id"),
    row.getAs[String]("name"),
    row.getAs[String]("session"),
    row.getAs[String]("time"),
Utils.ParseDocumentGuid(row.getAs("Data"),Utils.DOCDISRELATED,row.getAs[String]("name")).asScala.toList
    );

}

【讨论】:

    【解决方案2】:

    添加转化:

    import collection.JavaConverters._
    

    并添加.asScala 进行转换

    【讨论】:

    • import collection.JavaConverters._ def selectColumnsPerDocdisplayRows(row:Row):List[String]= { docDisplay( row.getAs[String]("id"), row.getAs[String](" name"), row.getAs[String]("session"), row.getAs[String]("time"), QSUtils.ParseDocumentGuid(row.getAs("Data"),QSUtils.DOCDISRELATED,row.getAs[String ]("name")).asScala ); } 我收到以下错误
    • .asScala.toList
    • 试过 .asScala.toList 得到以下消息类型不匹配;找到:com.extract.spark.QSSparkUtils.docDisplay required: List[String]
    • 谢谢它的工作,我不得不从我的 def 中删除返回类型 List[String] 。
    • import collection.JavaConverters._ def selectColumnsPerDocdisplayRows(row:Row)= { docDisplay( row.getAs[String]("id"), row.getAs[String]("name"), row .getAs[String]("session"), row.getAs[String]("time"), Utils.ParseDocumentGuid(row.getAs("Data"),Utils.DOCDISRELATED,row.getAs[String]("name" )).asScala.toList ); } ---->谢谢。
    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2019-11-24
    • 2020-08-26
    • 2021-10-06
    • 2020-12-04
    相关资源
    最近更新 更多