ETL的开发过程[通俗易懂]

ETL的开发过程[通俗易懂]在生产环境中,使用shell脚本完成一次etl操作1.定义一个etl函数,里面传入json行数据,用json.loads加载行数据,并对行数据进行判断,如果没有行数据,或data字段没有在行数据里,就直接返回空的结果,否则就继续往下执行2.接着获取行里的数据,用for循环判断,如果包含某个值,我就将变量赋值取出,装在集合容器里3.设置sparksession会话,并ena…

大家好,又见面了,我是你们的朋友全栈君。

在生产环境中, 使用shell脚本完成一次etl操作

1.定义一个etl函数, 里面传入json行数据, 用json.loads加载行数据,并对行数据进行判断,如果没有行数据,或data字段没有在行数据里, 就直接返回空的结果, 否则就继续往下执行

2.接着获取行里的数据, 用for循环判断, 如果包含某个值, 我就将变量赋值取出, 装在集合容器里

3.设置sparksession会话, 并enableHiveSupport, 我用的是hiveonspark模式,

4.初始化rdd, 从大数据emr集群中(也可能是从实时系统kafka读取数据)加载数据到rdd , 然后用自己自定义的etl解析过滤

5.将rdd转为df, createDateFream()要传两个参数,一个是rdd,一个是schema信息

6.将df创建临时表 createOrReplaceTemView()

7.将临时表表的数据加载到hive表中, 完成整个ETL操作

ETL常用场景:

1.清洗nginx日志信息, 预处理日志文件(每小时将上报的日志拉取到本机,hdfs命令上传集群),并清洗存入hive

2.每小时清洗用户表信息,

3.后处理清洗商户信息,

4.清洗并合并设备状态信息,

5.每小时清洗每日设备分成, 清洗并合并积分流水表信息, 每小时清洗支付宝订单表信息等,

def etl(row_str):
	result = []
	try:
		row = json.loads(row_str)
		if(not row) or ('data' not in row):
		return result
		
		获取行
		base = { 
   }
		for r_k in row:
			r_v = row[r_k]
			if r_k != 'data':
				r_k=r_k.lower()
				base[r_k]=r_k
				print(base)
		获取data
		for data in row['data']:
			base_data = base.copy()
			if data:
				for d_k in data:
					d_v = data[d_k]
					if d_k != 'list':
						d_k = d_k.lower()
						base_data[d_k] = d_v
						print(base_data)
		获取list
		 for list_ in data['list']:
                    if list_:
                        # print(list_)
                        list_data = base_data.copy()
                        # list_data.update(list_)
                        for l_k in list_:
                            l_v = list_[l_k]
                            l_k = l_k.lower()
                            list_data[l_k] = l_v
                        # print(list_data)
                        result += [list_data]
                        # print(result)
      except Exception as e:
      	print(e)
      	pass
      retuen result
      
  设置会话
  spark = SparkSession.builder.appName("程序名" % statdate分区日期)
  .enableHiveSupport()
  .getOrCreate()
  
  初始化rdd
  rawLogRDD = spark.sparkContext.textfile("hdfs://emr-cluster/ld_log")
  
  etl解析
  etllogRDD = rawLogRDD.flatMap(etl)
  可以进行测试打印
  for record in etlLogRDD.collect():
  	print(record)
  	
  	将rdd 转为df
  	sampleDF = spark.sql("select * from dept limit 1")
  	etlLogSchema = sampleDF.schema
  	etlLogSchema.__dict__['fields'] = etlLogSchema.__dict__['fields'][:-1]
etlLogSchema.__dict__['names'] = etlLogSchema.__dict__['names'][:-1]
etlLogDF = spark.createDataFrame(etlLogRDD,etlLogSchema)
测试:etlLogDF.printSchema()
etlLogDF.show()
exit()
创建临时表
etl.LogDF.createOrReplaceTmpView("etl_log")
写入分区表
spark.sql("alter table dept drop if exist partition(statdate='%s')" ) % statdate)
spark.sql("insert overwrite table dept partition(statdate='%s') select * from etl_log " % statdate)
		
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142667.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何区别标准POE交换机和非标POE交换机[通俗易懂]

    如何区别标准POE交换机和非标POE交换机[通俗易懂]通俗的说,POE交换机就是支持网线供电的交换机,其不但可以实现普通交换机的数据传输功能还能同时对网络终端进行供电。那么,我们该如何来区别如何区别标准POE交换机和非标POE交换机呢?接下来我们就跟随飞畅科技的小编一起来详细看看吧!一、什么是POE交换机PoE供电交换机是指能够通过网线为远端受电终端提供网络供电的交换机,包含网络交换机和PoE供电两个功能,是PoE供电系统中比较常见的供电设备。二、POE交换机的分类1、标准POE交换机符合IEEE802.3af、802.3at标准,就是标准P..

    2022年10月4日
    7
  • 【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战「建议收藏」

    【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战「建议收藏」”使用ctkPluginFramework插件系统构建项目实战”,这篇文章是写博客以来最纠结的一篇文章。倒不是因为技术都多么困难,而是想去描述一个项目架构采用ctkPluginFramework来构建总是未尽其意,描述的太少未免词不达意,描述的太多又显得太啰嗦。有些看过之前写的【大话QT之四】ctkPlugin插件系统实现项目插件式开发这篇文章的朋友也想了解一下到底如果从零开始架构一个项目。在写这

    2022年6月6日
    29
  • shell脚本之环境变量

    shell脚本之环境变量linux系统环境变量配置文件所在位置/etc/profile/etc/profiled/*.sh~/.bash_profile~/.bashrc/etc/bashrc配置文件的执行过程注销时生效的环境变量配置文件~/.bash_logout历史命令存储位置~/bash_historyshell登录信息本地终端欢迎信息:/etc/issue远程终端欢迎信息:/etc…

    2022年5月27日
    42
  • 2015欧冠决赛–脑力劳动结硕果

    2015欧冠决赛–脑力劳动结硕果

    2022年1月26日
    42
  • VS2022 .NET5一键发布到远程腾讯云IIS服务器「建议收藏」

    VS2022 .NET5一键发布到远程腾讯云IIS服务器「建议收藏」VS2022.NET5项目发布到远程IIS服务器

    2022年6月18日
    65
  • 如何彻底卸载清理MySQL

    如何彻底卸载清理MySQL我们因为各种各样的原因可能需要卸载MySQL或者卸载重装,但是如果MySQL不能清理干净的话是很容易出现问题的。本文就讲讲如何彻底的卸载MySQL,将MySQL从我们的电脑上清理干净。大体上分为三个步骤:卸载软件本身。清除残留文件(☆☆☆☆☆)。清理注册表。1.卸载软件本身首先就是把MySQL软件本身卸载掉,卸载的方式有很多种。可以通过各种软件管家卸载掉,也可以通过计算机自带的控…

    2022年6月25日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号