将csv数据从外部源导入HDFS并以特定格式存储的过程和工具是众所周知的。但是,如何为HDFS中已存在的数据转换数据格式?
我正在使用Json格式/未压缩的HDFS上的现有数据集(〜多个TB)。如何在最小化群集资源的同时将群集上的数据转换为同一群集上的Parquet?
选项:
谢谢,
马特
最佳答案
您可以编写一个Java代码,使用ParquetOutputFormat
类将现有的csv文件转换为 Parquet 。在here中查找Parquet实现。
代码将如下所示:
public static void main(String[] args) throws IOException,
InterruptedException, ClassNotFoundException {
Configuration conf = new Configuration();
Job job = new Job(conf);
job.setJobName("CSV to Parquet");
job.setJarByClass(Mapper.class);
job.setMapperClass(Mapper.class);
job.setReducerClass(Reducer.class);
job.setNumReduceTasks(1);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
job.setOutputFormatClass(ParquetOutputFormat.class);
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job, new Path("/csv"));
ParquetOutputFormat.setOutputPath(job, new Path("/parquet"));
job.waitForCompletion(true);
}
/csv
是csv文件的HDFS路径,而/parquet
是新的镶木文件的HDFS路径。Source