Java 在Spark中将纯文本文件转换为Hadoop序列文件

Java 在Spark中将纯文本文件转换为Hadoop序列文件,java,xml,hadoop,apache-spark,mapreduce,Java,Xml,Hadoop,Apache Spark,Mapreduce,我现有的项目是使用Hadoop map reduce生成一个序列文件,该文件具有XML格式的自定义键和值 XML值是通过从输入源一次读取一行生成的,RecordReader实现为以XML格式从纯文本返回下一个值 e、 g.输入源文件有3行(第一行是标题,其余行有实际数据) Post映射方法序列文件的数据如下: FeedInstanceKey{feedInstanceId=1000, entity=bars} <?xml version='1.0' encoding='UTF-8'?&g

我现有的项目是使用Hadoop map reduce生成一个序列文件,该文件具有XML格式的自定义键和值

XML值是通过从输入源一次读取一行生成的,RecordReader实现为以XML格式从纯文本返回下一个值

e、 g.输入源文件有3行(第一行是标题,其余行有实际数据)

Post映射方法序列文件的数据如下:

FeedInstanceKey{feedInstanceId=1000, entity=bars}   <?xml version='1.0' encoding='UTF-8'?><bars><id>1</id><name>Vijay</name><value>1000</value></bars>
FeedInstanceKey{feedInstanceId=1000, entity=bars}   <?xml version='1.0' encoding='UTF-8'?><bars><id>2</id><name>Gaurav</name><value>2000</value></bars>
FeedInstanceKey{feedInstanceId=1000, entity=bars}   <?xml version='1.0' encoding='UTF-8'?><bars><id>3</id><name>Ashok</name><value>3000</value></bars>
FeedInstanceKey{feedInstanceId=1000,entity=bar}1Vijay1000
FeedInstanceKey{feedInstanceId=1000,entity=bars}2Gaurav2000
FeedInstanceKey{feedInstanceId=1000,entity=bars}3Ashok3000
问题:我希望在Spark中实现同样的功能。基本上,如上所述读取输入文件并生成键值对

是否有任何方法/可能重用现有的InputFormat,从而重用Hadoop mapper类中使用的RecordReader

RecordReader负责/拥有将纯文本行转换为XML并作为值返回给Hadoop map方法的逻辑,以便在
context.write()中写入
method


请提出建议。

本节的Spark文档中介绍了这一点。对您来说,最重要的部分是:

对于其他Hadoop输入格式,可以使用 JavaSparkContext.hadoopRDD方法,该方法接受任意JobConf 输入格式类、键类和值类。将这些设置相同 使用输入源进行Hadoop作业的方式。你也可以 基于 “新的”MapReduceAPI(org.apache.hadoop.MapReduce)

下面是一个简单的示例,演示如何使用它:

public final class ExampleSpark {

    public static void main(String[] args) throws Exception {
        JavaSparkContext spark = new JavaSparkContext();
        Configuration jobConf = new Configuration();

        JavaPairRDD<LongWritable, Text> inputRDD = spark.newAPIHadoopFile(args[0], TextInputFormat.class, LongWritable.class, Text.class, jobConf);
        System.out.println(inputRDD.count());

        spark.stop();
        System.exit(0);
    }
}
公共期末课程示例Spark{
公共静态void main(字符串[]args)引发异常{
JavaSparkContext spark=新的JavaSparkContext();
Configuration jobConf=new Configuration();
javapairdd inpurtdd=spark.newAPIHadoopFile(args[0],TextInputFormat.class,LongWritable.class,Text.class,jobConf);
System.out.println(inpurdd.count());
spark.stop();
系统出口(0);
}
}
您可以看到JavaSparkContext的Javadocs

public final class ExampleSpark {

    public static void main(String[] args) throws Exception {
        JavaSparkContext spark = new JavaSparkContext();
        Configuration jobConf = new Configuration();

        JavaPairRDD<LongWritable, Text> inputRDD = spark.newAPIHadoopFile(args[0], TextInputFormat.class, LongWritable.class, Text.class, jobConf);
        System.out.println(inputRDD.count());

        spark.stop();
        System.exit(0);
    }
}