在spark中将纯文本文件转换为hadoop序列文件

jjjwad0x  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(364)

我现有的项目是使用hadoopmapreduce生成一个序列文件,该文件具有xml格式的自定义键和值。
xml值是通过从输入源一次读取一行来生成的,recordreader实现为从纯文本返回xml格式的下一个值。
e、 g.输入源文件有3行(第一行是标题,其余行有实际数据)

id|name|value
1|Vijay|1000
2|Gaurav|2000
3|Ashok|3000

postMap方法序列文件的数据如下:

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>

问:我希望在spark中实现同样的功能。基本上,如上所述读取输入文件并生成键值对。
是否有任何方法/可能重用现有的inputformat以及hadoopMap器类中使用的recordreader。
recordreader负责/拥有将纯文本行转换为xml并作为值返回给hadoop map方法以供写入的逻辑 context.write() 方法。
好心的建议。

30byixjq

30byixjq1#

这在spark文档的“外部数据集”部分中有介绍。重要的是:
对于其他hadoop InputFormat,可以使用javasparkcontext.hadooprdd方法,该方法接受任意的jobconf和input format类、key类和value类。设置它们的方式与输入源的hadoop作业相同。您还可以使用javasparkcontext.newapihadooprdd作为基于“new”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);
    }
}

您可以在这里看到javadocs for javasparkcontext。

相关问题