阅读量:2
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文件并进行相应的数据处理操作。