我现有的项目是使用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()
方法。
好心的建议。
1条答案
按热度按时间30byixjq1#
这在spark文档的“外部数据集”部分中有介绍。重要的是:
对于其他hadoop InputFormat,可以使用javasparkcontext.hadooprdd方法,该方法接受任意的jobconf和input format类、key类和value类。设置它们的方式与输入源的hadoop作业相同。您还可以使用javasparkcontext.newapihadooprdd作为基于“new”mapreduceapi(org.apache.hadoop.mapreduce)的输入格式。
下面是一个简单的示例,演示如何使用它:
您可以在这里看到javadocs for javasparkcontext。