Сохраните Geoshape в Elasticsearch, используя EShadoop от свиньи
Я пытаюсь сохранить geoshape (как показано ниже) для ES через pig, используя org.elasticsearch.hadoop.pig.EsStorage (2.2.0):
{
"location" : {
"type" : "circle",
"coordinates" : [-45.0, 45.0],
"radius" : "100m"
}
}
или же:
{
"location" : {
"type" : "polygon",
"orientation" : "clockwise",
"coordinates" : [
[ [-177.0, 10.0], [176.0, 15.0], [172.0, 0.0], [176.0, -15.0], [-177.0, -10.0], [-177.0, 10.0] ],
[ [178.2, 8.2], [-178.8, 8.2], [-180.8, -8.8], [178.2, 8.8] ]
]
}
}
Мы попробовали следующее:
REGISTER ./elasticsearch-hadoop-2.2.0.jar;
loadedRecords = LOAD 'inputFile.csv' USING PigStorage('|') AS (type:chararray,coordinates:bag{(float,float)},radius:chararray);
elasticData = foreach loadedRecords GENERATE (type ,{(45.0f,46.0f)},radius) AS geoArea:tuple(type:chararray,coordinates:bag{(float,float)},radius:chararray);
DESCRIBE elasticData ;
DUMP elasticData;
STORE elasticData INTO 'myindex/mytype' USING org.elasticsearch.hadoop.pig.EsStorage('es.http.retries=10','es.nodes=localhost','es.index.auto.create=true','es.mapping.pig.tuple.use.field.names=false');
и получая ошибку при разборе координат, она обнаружила не числовое значение и потерпела неудачу. (тип был проанализирован в CIRCLE)
Мы попробовали также следующее:
Я попробовал другое, но это тоже было проблематично:
REGISTER ./elasticsearch-hadoop-2.2.0.jar;
loadedRecords = LOAD 'inputFile.csv' USING PigStorage('|') AS (type:chararray,coordinates:chararray,radius:chararray);
--elasticData = foreach loadedRecords GENERATE (type ,{(45.0f,46.0f)} ,radius) AS geo:tuple(type:chararray,coordinates:bag{(float,float)},radius:chararray;
elasticData = foreach loadedRecords GENERATE TOMAP('type','circle','coordinates','[40.0f,46.0f]','radius','150m') AS geo:map[chararray];
DESCRIBE elasticData ;
DUMP elasticData;
STORE elasticData INTO 'myindex/mytype' USING org.elasticsearch.hadoop.pig.EsStorage('es.http.retries=10','es.nodes=host','es.index.auto.create=true','es.mapping.pig.tuple.use.field.names=false');
получено:
Caused by: com.fasterxml.jackson.core.JsonParseException: Current token (END_OBJECT) not numeric, can not use numeric value accessors
at [Source: org.elasticsearch.common.io.stream.InputStreamStreamInput@20063f76; line: 1, column: 83]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1581)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:533)
at com.fasterxml.jackson.core.base.ParserBase._parseNumericValue(ParserBase.java:799)
at com.fasterxml.jackson.core.base.ParserBase.getDoubleValue(ParserBase.java:713)
at org.elasticsearch.common.xcontent.json.JsonXContentParser.doDoubleValue(JsonXContentParser.java:180)
at org.elasticsearch.common.xcontent.support.AbstractXContentParser.doubleValue(AbstractXContentParser.java:184)
at org.elasticsearch.common.xcontent.support.AbstractXContentParser.doubleValue(AbstractXContentParser.java:174)
at org.elasticsearch.common.geo.builders.ShapeBuilder.parseCoordinates(ShapeBuilder.java:248)
at org.elasticsearch.common.geo.builders.ShapeBuilder.access$100(ShapeBuilder.java:46)
at org.elasticsearch.common.geo.builders.ShapeBuilder$GeoShapeType.parse(ShapeBuilder.java:744)
at org.elasticsearch.common.geo.builders.ShapeBuilder.parse(ShapeBuilder.java:291)
Кто-то сохранял геошап в ES с помощью свиньи и может нам помочь?
Спасибо!
1 ответ
Можете ли вы показать отображение для этого индекса? Некоторое время назад у меня были похожие проблемы с координатами в Pig - я сделал следующее:
в схеме ES я определил местоположение
"location": { "type": "geo_point" }
сгенерированное местоположение как TOTUPLE(долгота, широта)
Надеюсь, поможет.