任务二:数据清洗

       题目要求: 编写Scala工程代码,将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。

        将ods库中customer表数据抽取到dwd库中dim_customer的分区表,分区字段为etldate且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”, 、dwd_modify_time均填写操作时间,并进行数据类型转换。在hive cli中按照cust_key顺序排序,查询dim_customer前1条数据,将结果内容复制粘贴至对应报告中;

此题应该用spark-core或者sparksql都可以,感觉用sql会简单一些

一、先将数据从customer表抽取到dim_customer

        由于没有数据源,不清楚dim_customer的字段有哪些,所以就按照customer表的字段自行创建一个,数据也是我随便写吧

1.建表

spark.sql("create table dim_customer(id int,name string,age int) partitioned by (etldate string)")

这里也可以使用like,会更简单一些,但要确定两表的分区字段一致,否则会报错

2.导入数据

        在这里我用的动态导入,需要先关闭严格模式

scala> spark.sql("set hive.exec.dynamic.partition.mode=nonstrict;")

spark.sql("insert overwrite table dim_customer PARTITION (etldate) select * from customer")

3.查表

可见数据已经导入成功 

二、添加字段

spark.sql("ALTER TABLE dept add columns(dwd_insert_user string)")

spark.sql("ALTER TABLE dept add columns(dwd_insert_time string)")

spark.sql("ALTER TABLE dept add columns(dwd_modify_user string)")

spark.sql("ALTER TABLE dept add columns(dwd_modify_time string)")

查表

 我不知道hive如何在新增字段时设置默认值,所以此时新增的数据都为null,所以下一步要将null修改为我们需要的值

修改dwd_insert_user列

scala> spark.sql("insert overwrite table dim_customer partition(etldate) select id,name,age,nvl(dwd_insert_user,'user1') as dwd_insert_user,dwd_modify_user,dwd_insert_time,dwd_modify_time,etldate  from dim_customer")
 

修改dwd_modify_user列

spark.sql("insert overwrite table dim_customer partition(etldate) select id,name,age,dwd_insert_user,nvl(dwd_modify_user,'user1') as dwd_modify_user,dwd_insert_time,dwd_modify_time,etldate  from dim_customer")
 

修改dwd_modify_time列

spark.sql("insert overwrite table dim_customer partition(etldate) select id,name,age,dwd_insert_user,dwd_modify_user,dwd_insert_time,nvl(dwd_modify_time,'2022-08-13'),etldate  from dim_customer")

修改dwd_insert_time列

spark.sql("insert overwrite table dim_customer partition(etldate) select id,name,age,dwd_insert_user,dwd_modify_user,nvl(dwd_insert_time,'2022-08-13'),dwd_modify_time,etldate  from dim_customer")
 

三、将日期格式改为yyyy-MM-dd HH:mm:ss

由于不知道原数据是什么样,这里只改dwd_insert_time和dwd_modify_time两列

spark.sql("insert overwrite table dim_customer partition(etldate) select id,name,age,dwd_insert_user,dwd_modify_user,date_format(dwd_insert_time,'yyyy/MM/dd HH:mm:ss') as dwd_insert_time ,date_format(dwd_modify_time,'yyyy/MM/dd HH:mm:ss') as dwd_modify_timeetldate ,etldate from dim_customer") ;

注意:date_format函数如果第一个参数是字符串,连接符只能是-,别的识别不了

四、查询

 题目让使用cust_key排序,在这里我用age排序

select * from dim_customer order by  age limit 1;

 

我感觉我写的还是有一些麻烦,如果有简单一点的希望大佬们能指点一下

  • 13
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在PyTorch中进行数据清洗的过程通常包括以下几个步骤: 1. 加载数据集:首先,你需要加载你的数据集。这可以通过使用PyTorch提供的数据加载器类(如`torchvision.datasets`)来完成,或者自定义一个数据加载器类。 2. 数据预处理:在加载数据集之后,你可能需要对数据进行一些预处理操作,如裁剪、缩放、标准化等。PyTorch提供了许多预处理函数(如`torchvision.transforms`)来帮助你完成这些操作。 3. 数据转换:一旦数据预处理完成,你可能需要将数据转换为PyTorch所需的张量格式。你可以使用`torch.from_numpy()`将NumPy数组转换为张量,或使用`torch.tensor()`创建一个新的张量。 4. 数据清洗数据清洗的具体操作取决于你的数据集和任务需求。常见的数据清洗操作包括去除缺失值、处理异常值、删除重复样本等。你可以使用NumPy或Pandas等库来执行这些操作。 5. 数据划分:在数据清洗之后,你可能需要将数据集划分为训练集、验证集和测试集。你可以使用PyTorch提供的数据集拆分函数(如`torch.utils.data.random_split()`)来实现。 6. 数据加载器:最后,你需要创建数据加载器来批量加载和迭代数据。PyTorch提供了`torch.utils.data.DataLoader`类,可以帮助你方便地创建数据加载器,并支持批量加载、数据随机化等功能。 以上是一个基本的数据清洗流程,具体的实现细节会根据你的数据集和任务而有所不同。希望对你有所帮助!如果你有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值