spark清洗离线数据

最近花了半个月时间研究了一哈scala 感觉可以做的东西还是蛮多了。目前工作清洗40多G的数据很费劲(采用oracle做很费事),所有研究了spark来清洗离线数据。

废话不多说开始程序设计:

首先我想到的是输入 这里采用HDFS文件。假设我们将oracle的数据采用json格式的形式并且采用urldecode方法转换文本(因为一些特殊字符常常会导致我们的json文件读取异常,所有我这里采用转码的情况来规避这个问题---这里特殊字符和回车换行对我数据来说是合理的)类型的数据。

 主函数代码:

def main(args: Array[String]) {
  //输入文件既可以是本地linux系统文件,也可以是其它来源文件,例如HDFS
  
  init() --加载公参数据
  if (args.length == 0) {
    System.err.println("Usage: DateClean  ")
    System.exit(1)
  }

  val conf = new SparkConf().setAppName("DateClean ")
  val sc = new SparkContext(conf)

  //rdd2为所有包含Spark的行

  val rdd1 = sc.textFile(args(0))
  val rdd2 = rdd1.map(CClean)


  //保存内容,在例子中是保存在HDFS上
  rdd2.saveAsTextFile(args(1))
  sc.stop()
}

输入为文件  事先准备的一个json文件

init()  为程序初始化 然后访问数据加载公参数据  比如  读取数据库     表数据1 男2女 加载到hashmap集合中

撰写一个 json解析方法 返回一个 数据集

提供一个URLendcode 来解析json中字段未字符的数据 然后清洗


关键点 清洗函数

CClean


def CClean(datejson: String): String = {
  
  val datearray: Array[String] = datejson.split()
  var data1 = f_clean_data1(datearray.apply(1))
  var data2 = f_clean_data2(datearray.apply(2))
  var data3 = f_clean_data3(datearray.apply(3))

  val ress = Jsongroup("data1",data1,"data2",data2,"data3",data2)
ress}

这里清洗完毕后 组装一个json格式的数据返回


  rdd2.saveAsTextFile(args(1))
  sc.stop()
最后将这个返回的 rdd2 保存到参数2文件中  ,整个清洗过程结束



你可能感兴趣的:(spark清洗离线数据)