栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark实现获取多张excle表字段汇总到一张

Spark实现获取多张excle表字段汇总到一张

需求:现在有几十张excle表,我需要从中获取某几个字段(a,b,c,d,e)汇总到一张表中,这些字段并不是每张表都具备。

Saprk Dataframe实现:

1. 构建上下文连接

    //获取上下文链接,并设置日志的打印格式
    Logger.getLogger("org").setLevel(Level.WARN)
    val str = Array("a","b","c","d","e")
    val conf = new SparkConf().setAppName("calculate").setMaster("local[*]")
    val sc= new SparkContext(conf)
    val ss = SparkSession.builder().master("local[*]").appName("app").getOrCreate()

 2.先做一个获取所有表的方法

//先做一个获取文件夹下所有表格的方法
def getFile(path:String):Iterable[File]={
    val file = new File(path)
    file.listFiles()
  }

3.spark不能直接读excle,需要先加入依赖

      
        
            com.crealytics
            spark-excel_2.11
            0.12.2
        

4. 核心代码开始了,主要注意读取excle的参数配置和withcolumn方法

    //设置读excle的参数
    val reader = ss.read.format("com.crealytics.spark.excel").option("useHeader", "true")
    // 根据之前的方法获取一个文件迭代器
    val it = getFile(excle所在文件夹地址).iterator
   //遍历excle,创建dataframe 
   while (it.hasNext){
      var df = reader.load("file:///"+ it.next().toString)
      //df.show(2)
      for (elem <- str) {
        //判断目标excle,是否包含这些字段,如果不包含使用withcolumn增加该字段
        if (!df.columns.contains(elem)){
           df=df.withColumn(elem, df(df.columns(1)) * 0)
           df.withColumn(elem,monotonically_increasing_id())
        }
      }
      df.select( "a","b","c","d","e")
        .write.format("com.crealytics.spark.excel")
        //添加的格式为追加,不覆盖
        .mode("append")
        //是否打印表头
        .option("useHeader", "true").save("file:///保存地址")
    

    }
    ss.stop()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号