1.将data.csv文件上传到HDFS上,通过邮件发送,然后下载上传。 2.在IDEA编写MapReduce程序对data.csv中带有空值(可以通过判断数组长度来确定是否存在缺失值)的行进行删除 3.将MapReduce处理完成后的数据加载Hive(创建外部表指定location信息来加载数据)中。
时间: 2023-07-15 21:13:58 浏览: 137
现有student.txt和student-score.txt 将两个文件上传到hdfs上 使用Map/Reduce框架完成下面
好的,以下是具体步骤:
1. 将data.csv文件上传到HDFS上:
a. 在HDFS上创建一个目录,例如 /input:
```
hadoop fs -mkdir /input
```
b. 将data.csv上传到该目录下:
```
hadoop fs -put /path/to/data.csv /input/
```
c. 通过邮件发送data.csv:
将data.csv作为附件发送邮件即可。
d. 下载上传:
将data.csv下载到本地即可。
2. 在IDEA编写MapReduce程序对data.csv中带有空值的行进行删除:
a. 创建一个Java项目,在项目中添加Hadoop相关依赖。
b. 创建一个MapReduce程序,实现对data.csv中带有空值的行进行删除。
```java
public class RemoveNullRows {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "remove null rows");
job.setJarByClass(RemoveNullRows.class);
job.setMapperClass(NullRowRemoverMapper.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
public static class NullRowRemoverMapper extends Mapper<Object, Text, Text, NullWritable> {
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
String[] fields = value.toString().split(",");
if (fields.length == 3 && !fields[0].isEmpty() && !fields[1].isEmpty() && !fields[2].isEmpty()) {
context.write(value, NullWritable.get());
}
}
}
}
```
该程序中的 NullRowRemoverMapper 类实现了对带有空值的行进行删除,仅输出不含空值的行。
c. 打包该项目,并在Hadoop集群上运行:
```
hadoop jar /path/to/RemoveNullRows.jar RemoveNullRows /input/data.csv /output
```
运行后,输出结果将保存在 /output 目录下。
3. 将MapReduce处理完成后的数据加载到Hive中:
a. 在Hive中创建一个外部表:
```
CREATE EXTERNAL TABLE my_table (
col1 STRING,
col2 STRING,
col3 STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/output';
```
b. 执行查询操作:
```
SELECT * FROM my_table;
```
将会返回处理后的数据。
阅读全文