使用Pig-Hadoop在Elasticsearch中获取包含文档的字段

时间:2016-08-16 04:06:02

标签: elasticsearch apache-pig

我正在使用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)

1 个答案:

答案 0 :(得分:0)

经过多次挖掘后,找到了解决方案,如果有人发现,请在此处发布以供参考。

您可以在将数据加载到pig时指定架构:

all_fieldA_values = FOREACH raw_logs GENERATE fieldA;

ES-Hadoop会将Elasticsearch中的文档字段与Pig提供的架构进行匹配。此时,您可以按名称引用字段:

translucent