我正在尝试对数据进行一些预处理,这些数据将被提供给lucidworks大数据进行索引。lwbd接受sequencefile文件形式的solrxml。我想创建一个pig脚本,它将获取目录中的所有solrxml文件并以
filename_1 => <here goes some XML>
...
filename_N => <here goes some more XML>
土生土长的Pig PigStorage()
load函数可以自动创建一个列,其中包含从中提取数据的文件的名称,理想情况下如下所示:
{"filename_1", "<here goes some XML>"}
...
{"filename_N", "<here goes some more XML>"}
但是,pigstorage()也会自动使用'\n'作为行分隔符,因此我最终得到的是一个如下所示的包:
{"filename_1", "<some partial XML from file 1>"}
{"filename_1", "<some more partial XML from file 1>"}
{"filename_1", "<the end of file 1>"}
...
我相信你明白了。我的问题是,如果我把这个包写到一个sequencefile中,其他应用程序将如何读取它?是否可以合并为
"filename_1" => "<some partial XML from file 1>
<some more partial XML from file 1>
<the end of file 1>"
,默认情况下,处理我将其馈送到的应用程序?或者我可以做一些后期处理来把它转换成这种格式?谢谢你的帮助。
1条答案
按热度按时间zazmityj1#
因为我找不到任何关于内置sequencefile编写器的信息,所以我假设您正在使用udf(如果没有,那么您需要这样做)。
您必须提前对文件进行分组(按文件名),然后将其发送给writer udf。
根据您编写sequencefile writer的方式,转换
all_xml_data
使用python自定义项提前打包到chararray,如:注意:重要的是要认识到,这样xml数据的顺序将变得混乱。如果可能的话,根据你的数据,
stringify
也许可以在重新设定的基础上进行扩展。