离线报表实现

我们在对报表进行处理的时候,怎么以一个属性为维度,统计其他属性的指标。
以下的案例是我们对我们的报表以配属铁路局为维度统计他们的各个指标,而且要使用多种方法
一个是使用sparkcore去实现,还有一个是使用sparksql来实现
以下的代码是使用sparkcore来实现的

package report

import java.util.Properties

import com.google.gson.Gson
import config.ConfigHelper
import org.apache.commons.lang.StringUtils
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{
   DataFrame, SaveMode, SparkSession}
import scalikejdbc.{
   DB, SQL}
import scalikejdbc.config.DBs

//根据铁路局维度进行atperror报表统计
object AttachRWBureauAnaylysis {
   
  def main(args: Array[String]): Unit = {
   
    //会有两个参数,一个是输入路径,一个是输出路径,因此参数<2的话说明有参数丢失,报错提醒我们检查
    if(args.length<2){
   
      println("参数错误")
      return
    }
    //session
    val session = SparkSession
      .builder()
      //名字
      .appName(this.getClass.getName)
      //本地的
      .master("local[*]")
      //配置spark的序列化方式
      //spark1.6之前的版本必须得设置
      .config("spark.serializer",ConfigHelper.serializer)
      .getOrCreate()
    //导入隐式转换
    import session.implicits._
    //读取数据
    val sourceFrame: DataFrame = session.read.parquet(args(0))
    //处理数据
    //row:行
    //每一行进行一次处理
    val rddResult: RDD[(String, List[Int])] = sourceFrame.map(row => {
   
      //获取铁路局
      val attachRWBureau: String = row.getAs[String]("MPacketHead_AttachRWBureau")
      //获取atperror
      val atpError = row.getAs[String]("MATPBaseInfo_AtpError")
      //判断指标
      //如果atpError不为空,前面为1,如果atpError为空,那么前面为0
      //先判断atpError不为空,如果为空,则执行下面的else语句,全部输出为0
      val listAtpError: List[Int] = if (StringUtils.isNotEmpty(atpError)) {
   
        val listError: List[Int] =
          if (atpError.equals("车载主机")) {
   
            List[Int](1, 0, 0, 0, 0, 0, 0, 0)
          } else if (atpError.equals("无线传输单元")) {
   
            List[Int](0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值