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,需要先加入依赖

      <!--  读取excel xlsx-->
        <dependency>
            <groupId>com.crealytics</groupId>
            <artifactId>spark-excel_2.11</artifactId>
            <version>0.12.2</version>
        </dependency>

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值