addrparser icon indicating copy to clipboard operation
addrparser copied to clipboard

运行报错JSONException: syntax error, expect ], actual string

Open panda403 opened this issue 5 years ago • 2 comments

运行的时候报错如下: FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments ''116.633366'': Unable to instantiate UDF implementation class com.LatLngParseAdr: com.alibaba.fastjson.JSONException: syntax error, expect ], actual string org.apache.hadoop.hive.ql.parse.SemanticException: Line 1:7 Wrong arguments ''116.633366'': Unable to instantiate UDF implementation class com..LatLngParseAdr: com.alibaba.fastjson.JSONException: syntax error, expect ], actual string

请问知道是什么原因吗

panda403 avatar Feb 19 '20 12:02 panda403

根据的你报错,猜测你是实现了一个hive的UDF,然后使用addrparser是吗? 请提供更详细的说明,比如UDF的代码

hsp8712 avatar Feb 21 '20 02:02 hsp8712

根据的你报错,猜测你是实现了一个hive的UDF,然后使用addrparser是吗? 请提供更详细的说明,比如UDF的代码 对,我是想弄成hive 的udf,代码如下: import org.apache.hadoop.hive.ql.exec.UDF; import tech.spiro.addrparser.common.RegionInfo; import tech.spiro.addrparser.io.RegionDataInput; import tech.spiro.addrparser.io.file.JSONFileRegionDataInput; import tech.spiro.addrparser.parser.Location; import tech.spiro.addrparser.parser.LocationParserEngine; import tech.spiro.addrparser.parser.ParserEngineException;

public class LatLngParseAdrInfo extends UDF {

public LocationParserEngine engine;

public LatLngParseAdrInfo() { try { String path = "china-region.json"; System.out.println("*****************:" + path); RegionDataInput regionDataInput = new JSONFileRegionDataInput(path); engine = new LocationParserEngine(regionDataInput); engine.init(); } catch (ParserEngineException e) { e.printStackTrace(); System.out.println("init local resource file failed....."); } }

public String evaluate(String lat, String lng) { try { double lat_d = Double.parseDouble(lat); double lng_d = Double.parseDouble(lng); return getLocation(lat_d, lng_d); } catch (NumberFormatException e) { e.printStackTrace(); return null; }

}

public static void main(String[] args) { String lat = "32.038634"; String lng = "118.750934"; // new LatLngParseAdr().getLocation(lat,lng); new LatLngParseAdrInfo().evaluate(lat, lng); }

public String getLocation(double lat, double lng) { try { Location location = engine.parse(lng, lat); RegionInfo provInfo = location.getProv(); RegionInfo cityInfo = location.getCity(); RegionInfo districtInfo = location.getDistrict(); String res = provInfo.getName() + "," + cityInfo.getName() + "," + districtInfo.getName(); System.out.println(res); return res; } catch (Exception e) { return null; } } }

panda403 avatar Mar 05 '20 13:03 panda403