2016-08-16 85 views
0

我正在使用pig-hadoop從我的Elasticsearch服務器讀取文檔。這些文件看起來像這樣使用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": "....." 
    } 
} 

這很好。當我試圖通過豬

中讀取該數據
-- 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) 

現在在這一點上出現的問題,我沒有哪個領域失蹤的任何想法或哪些是因爲每行中的數據不一致而存在的。這對於進一步的處理來說是個問題。

有沒有什麼辦法可以將字段值與行或某種映射關聯起來,這些映射可以告訴我哪個值屬於哪個字段。這種東西

(A=fieldA,B=fieldB,C=fieldC,E=fieldE) 
(A=fieldB,C=fieldC,D=fieldD) 

回答

0

經過一些更深入的挖掘,找到了解決辦法,張貼在這裏供參考,如果有人發現。

將數據加載到豬時,您可以指定一個模式:

raw_logs = LOAD 'sa-test' USING org.elasticsearch.hadoop.pig.EsStorage('es.query=?q=someFilter', 'es.mapping.date.rich=false') AS (fieldA:...,fieldB:...,fieldC:...,fieldD:...fieldE:...); 

ES-的Hadoop將Elasticsearch匹配文件中的字段爲豬提供的架構。此時,您可以按名稱查看字段:

all_fieldA_values = FOREACH raw_logs GENERATE fieldA; 
相關問題