头歌 数据挖掘实践项目 数据清洗(Spark)

数据清洗(Spark)

第1关:数据清洗

本关任务

基于EduCoder平台提供的初始数据集(数据集存放在 /data/workspace/myshixun/data/movies.csv 中),按照下面的要求,完成电影票房数据的清洗工作。

编程要求

  1. 去掉字段“上映天数”中带有“零点场”、“点映”、“展映”和“重映”的电影数据;
  2. 以字段“上映天数”和“当前日期”为依据,在尾列添加一个“上映日期”(releaseDate)的字段,该字段值为“当前日期”减去“上映天数”+1(格式为:2020-10-13。例如:若字段“上映天数”的值为“上映2天”,字段“当前日期”为“2020-10-10”,则字段“上映日期”的值为“2020-10-09”)。如果字段“上映天数”为空,则字段“上映日期”的值设为“往期电影”。注意:若字段“上映天数”的值为“上映首日”,则字段“上映日期”的值应设为“当前日期”的值;
  3. 对字段“当日综合票房”和字段“当前总票房”的数据值进行处理,以“万”为单位,通过数字形式展示,若原数据中有“万”等表示量级的汉字,需去掉量级汉字(如:“1.5亿”需转换为“15000”,“162.4万”转换为“162.4”)。转换时需注意精度缺失问题(如:使用 double、float 等类型做算术运算时,1.14 亿转换为万时,结果会出现 11399.999999999998 万,可以使用 BigDecimal 类来处理这类精度缺失问题),字段“当日综合票房”和字段“当前总票房”最后保留两位小数;
  4. 清洗完的数据集设置为 1 个分区后,存储到 /root/files 目录下,分隔方式为 \t。

** 注意:不要改变字段原本的顺序。 **

数据集说明

本数据集是电影票房数据,包含十个字段的信息,数据集的字段含义说明如下:

字段名 说明
movie_name 电影名
boxoffice 当日综合票房
box_rate 票房占比
sessions 排片场次
show_count_rate 排片占比
avg_number 场均人次
attendance 上座率
total_boxoffice 当前总票房
movie_days 上映天数
current_time 当前日期
部分数据展示:
盛世秧歌    7.06万    <0.1%    107    <0.1%    22    47.3%    1757.1万    展映    2019-10-16
决胜时刻    70.83万    0.6%    561    0.1%    34    21.6%    1.14亿    上映25天    2019-10-14
天池水怪    5.43万    <0.1%    55    <0.1%    30    --    75.1万        2020-10-06

清洗后数据展示:

决胜时刻    70.83    0.6%    561    0.1%    34    21.6%    11400.0    上映25天    2019-10-14    2019-09-20
天池水怪    5.43    <0.1%    55    <0.1%    30    --    75.1        2020-10-06    往期电影

注意事项

  • 任务完成后请点击"评测"按钮,验证电影票房数据是否成功清洗,程序未通过的情况下,可以点击测试集查看具体问题;

  • 本任务设置了多个测试集,通过其中任一测试集将可获得对应分数。

考核点说明

1.清洗数据后共多少行;
2.字段“上映日期”添加成功;
3.字段“当日综合票房”和字段“当前总票房”的单位处理成功。


开始你的任务吧,祝你成功!

代码:

import org.apache.log4j.Level;
import static org.apache.spark.sql.functions.substring;
import org.apache.spark.sql.functions;
import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.api.java.UDF1;
import org.apache.spark.sql.api.java.UDF2;
import org.apache.spark.sql.types.DataTypes;
import java.text.DecimalFormat;
import java.math.BigDecimal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值