我正在使用pig-hadoop从我的Elasticsearch服务器读取文档。文件看起来像这样
def prod(arr, x)
return arr if x==1
arr.product(*[arr]*(x-1))
end
arr = [0,1,2,3]
arr == prod(arr, 1) #=> true
arr.product(arr) == prod(arr, 2) #=> true
arr.product(arr, arr) == prod(arr, 3) #=> true
arr.product(arr, arr, arr) == prod(arr, 4) #=> true
arr.product(arr, arr, arr, arr) == prod(arr, 5) #=> true
哪个好。当我尝试通过Pig
读取此数据时,会出现此问题{
"_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": "....."
}
}
这会以
的形式产生数据-- 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)
答案 0 :(得分:0)
经过多次挖掘后,找到了解决方案,如果有人发现,请在此处发布以供参考。
您可以在将数据加载到pig时指定架构:
all_fieldA_values = FOREACH raw_logs GENERATE fieldA;
ES-Hadoop会将Elasticsearch中的文档字段与Pig提供的架构进行匹配。此时,您可以按名称引用字段:
translucent