繁体   English   中英

优化Spark / Scala速度

[英]Optimizing Spark/Scala speed

我有一个Spark脚本,该脚本可建立与Hive的连接并从不同的数据库读取数据,然后将联合写入CSV文件。 我用两个数据库测试了它,花了20分钟。 现在,我正在使用11个数据库进行尝试,并且自昨天晚上(18小时!)开始运行。 该脚本应该在每个数据库中获得400000至800000行。

我的问题是:这样的工作18小时正常吗? 如果没有,我该如何优化呢? 这是我的主要职责:

// This is a list of the ten first databases used:
var use_database_sigma = List( Parametre_vigiliste.sourceDbSigmaGca, Parametre_vigiliste.sourceDbSigmaGcm
                                  ,Parametre_vigiliste.sourceDbSigmaGge, Parametre_vigiliste.sourceDbSigmaGne
                                  ,Parametre_vigiliste.sourceDbSigmaGoc, Parametre_vigiliste.sourceDbSigmaGoi
                                  ,Parametre_vigiliste.sourceDbSigmaGra, Parametre_vigiliste.sourceDbSigmaGsu
                                  ,Parametre_vigiliste.sourceDbSigmaPvl, Parametre_vigiliste.sourceDbSigmaLbr)


    val grc = Tables.getGRC(spark) // This creates the first dataframe

    var sigma = Tables.getSIGMA(spark, use_database_sigma(0)) // This creates other dataframe which is the union of ten dataframes (one database each)
    for(i <- 1 until use_database_sigma.length)
    {
    if (use_database_sigma(i) != "")
     {
        sigma = sigma.union(Tables.getSIGMA(spark, use_database_sigma(i)))
      }
    }

// writing into csv file

    val grc_sigma=sigma.union(grc) // union of the 2 dataframes
    grc_sigma.cache
    LogDev.ecrireligne("total : " + grc_sigma.count())
    grc_sigma.repartition(1).write.mode(SaveMode.Overwrite).format("csv").option("header", true).option("delimiter", "|").save(Parametre_vigiliste.cible)
    val conf = new Configuration()
    val fs = FileSystem.get(conf)
    val file = fs.globStatus(new Path(Parametre_vigiliste.cible + "/part*"))(0).getPath().getName();
        fs.rename(new Path(Parametre_vigiliste.cible + "/" + file), new Path(Parametre_vigiliste.cible + "/" + "FIC_PER_DATALAKE_.csv"));
  grc_sigma.unpersist()

由于不是用IDE编写的,因此可能不在某个地方,但是您可以理解。

val frames = Seq("table1", "table2).map{ table =>
   spark.read.table(table).cache()
}

frames
.reduce(_.union(_)) //or unionByName() if the columns aren't in the same order
.repartition(1)
.write
.mode(SaveMode.Overwrite)
.format("csv")
.options(Map("header" -> "true", "delimiter" -> "|"))
.save("filePathName")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM