我在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来处理转换的镶木地板数据。
答案 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