我正在使用pig hadoop从elasticsearch服务器读取文档。文件看起来像这样
{
"_index": "sa-test",
"_type": "logs",
"_id": "AUujDbzSR5FzDDhtC1LH",
"_score": 1,
"_source": {
"fieldA": "....",
"fieldB": "....",
"fieldC": ".....",
"fieldE": "....."
}
}, {
"_index": "sa-test",
"_type": "logs",
"_id": "AUujDbzSR5FzXXXtC1LH",
"_score": 1,
"_source": {
"fieldB": "....",
"fieldC": ".....",
"fieldD": "....."
}
}
这很好。当我试图通过pig读取这些数据时,问题就出现了
-- load the data in
raw_logs = LOAD 'sa-test' USING org.elasticsearch.hadoop.pig.EsStorage('es.query=?q=someFilter', 'es.mapping.date.rich=false');
-- for now just dump it
DUMP raw_logs;
这将生成表单中的数据
(fieldA,fieldB,fieldC,fieldE)
(fieldB,fieldC,fieldD)
现在,我不知道哪些字段丢失了,哪些字段存在,因为每行中的数据不一致。这是一个有待进一步处理的问题。
有什么方法可以得到字段值以及行或某种Map,可以告诉我哪个值属于哪个字段。类似的东西
(A=fieldA,B=fieldB,C=fieldC,E=fieldE)
(A=fieldB,C=fieldC,D=fieldD)
1条答案
按热度按时间pgky5nke1#
经过进一步的挖掘,找到了解决办法,如果有人发现,就贴在这里供参考。
将数据加载到pig时,可以指定架构:
es-hadoop将把elasticsearch中的文档字段与提供的pig模式匹配起来。此时,您可以按名称引用字段: