在Spark中将数据转换为Parquet

时间:2017-01-18 08:33:48

标签: apache-spark avro parquet spark-avro

我在S3中有一些遗留数据,我想使用Java API使用Spark 2转换为镶木地板格式。

我使用Avro编译器获得了所需的Avro架构(.avsc文件)及其生成的Java类,我希望使用Parquet格式的这些架构存储数据。输入数据不是任何标准格式,但我有一个库,可以将每行从旧文件转换为Avro类。

是否可以将数据作为JavaRDD<String>读取,使用库将转换应用于Avro类,最后将其存储为镶木地板格式。

类似的东西:

JavaRDD<String> rdd = javaSparkContext.textFile("s3://bucket/path_to_legacy_files");    
JavaRDD<MyAvroClass> converted = rdd.map(line -> customLib.convertToAvro(line));    
converted.saveAsParquet("s3://bucket/destination"); //how do I do this

上述内容是否可行?我后来想要使用Hive,Presto以及Spark来处理转换的镶木地板数据。

2 个答案:

答案 0 :(得分:1)

暂时忽略S3;这是一个制作细节。您需要从更简单的问题开始#34;将我的格式的本地文件转换为标准文件&#34;。这是您可以在本地实现的,对单个小数据样本集进行单元测试。

这与Spark中的Hadoop Mapreduce大致相同:实现InputFormat<K, V>FileInputFormat<K, V>的子类,或使用Hadoop的org.apache.hadoop.streaming.mapreduce.StreamInputFormat输入格式,实现自己的RecordReader ,然后将选项spark.hadoop.stream.recordreader.class设置为记录阅读器的类名(可能是最简单的)。

有很多关于此的文档,以及堆栈溢出问题。源树本身有很多例子。

答案 1 :(得分:0)

想出来,基本上是Steve提到的方法,除了Hadoop输入和输出格式已经存在:

zoomAmount = 0
相关问题