代码之家  ›  专栏  ›  技术社区  ›  Gaurang Shah

scala-如何避免使用可变列表和强制转换

  •  0
  • Gaurang Shah  · 技术社区  · 3 年前

    我已经编写了以下代码,这些代码运行良好。但是,我想检查一下是否有一种方法可以避免使用可变列表和将数据类型从any转换为字符串。

    import scala.collection.mutable.ListBuffer
    
    val databases = spark.catalog.listDatabases.select($"name").collect().map(_(0)).toList
    var tables= new ListBuffer[String]()
    databases.foreach{database =>
      val t = spark.catalog.listTables(database.asInstanceOf[String]).filter($"isTemporary" === false).filter($"tableType" =!= "VIEW").select($"name").collect.map(database+"."+_(0).asInstanceOf[String]).toList
      tables = tables ++ t
    }
    tables.foreach(println)
    
    0 回复  |  直到 3 年前
        1
  •  2
  •   Dima    3 年前

    您可以使用行解构器来消除铸造:

       val databases: List[String] = listDatabases.select($"name").collect().map { 
          case Row(name: String) => name
       }.to[List]
    

    至于可变性,只需使用 flatMap 而不是 foreach :

    val tables = databases.flatMap { db => listTables(db).filter .... }