Hadoop本身并不直接支持CSV文件的读取,但可以通过Hadoop的MapReduce框架或Hive等工具来读取CSV文件。
使用MapReduce框架读取CSV文件: 可以编写一个MapReduce程序来读取CSV文件。在Mapper阶段,将CSV文件中的每一行作为输入,并将其拆分为字段;在Reducer阶段,将处理过的数据写入HDFS或其他存储中。
使用Hive读取CSV文件: Hive是建立在Hadoop之上的数据仓库工具,可以通过Hive的SQL语言来查询和处理数据。可以创建一个外部表来读取CSV文件,并使用Hive的查询语句来操作这些数据。
示例代码:
使用MapReduce框架读取CSV文件的示例代码:
public class CSVReader {
public static class CSVMapper extends Mapper<LongWritable, Text, Text, Text> {
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] fields = line.split(",");
// 处理CSV文件中的每一行数据
context.write(new Text(fields[0]), new Text(fields[1]));
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "CSVReader");
job.setJarByClass(CSVReader.class);
job.setMapperClass(CSVMapper.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path("input.csv"));
FileOutputFormat.setOutputPath(job, new Path("output"));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
使用Hive读取CSV文件的示例代码:
CREATE EXTERNAL TABLE my_table (
col1 STRING,
col2 STRING,
col3 INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/path/to/csv/file';
SELECT * FROM my_table;
通过以上两种方法,可以在Hadoop上读取CSV文件并进行相应的数据处理操作。