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文件并進行相應的數據處理操作。