Hive空間演算 -3-


約2000件ほどの面を減らして挙動確認してみる。

兵庫県だけ 49面ほど抜出。

ADD JAR /usr/lib/hive/lib/esri-geometry-api.jar;
ADD JAR /usr/lib/hive/lib/spatial-sdk-hadoop.jar;

create temporary function ST_Contains as 'com.esri.hadoop.hive.ST_Contains';
create temporary function ST_Point as 'com.esri.hadoop.hive.ST_Point';
create temporary function ST_Aggr_Union as 'com.esri.hadoop.hive.ST_Aggr_Union';

use test;

SELECT
 jpn.SIKUCHOSON
 ,count(*) cnt 
FROM
 ( 
    SELECT
      jpn71.shape shp
     ,jpn71.SIKUCHOSON 
    FROM
     jpn71
    WHERE
     jpn71.KEN LIKE  '%兵庫%'
  ) jpn
JOIN
 addrwkt
WHERE
 ST_Contains(jpn.shp, ST_Point(addrwkt.lon, addrwkt.lat))
GROUP BY
 jpn.SIKUCHOSON
ORDER BY
 cnt desc;

多分あってそうな結果が取れた。
これで、10分程度か。

姫路市  95795
加古川市        56801
たつの市        20586
豊岡市  19380
伊丹市  17192
明石市  16255
稲美町  16065
西区    16048
北区    15878
丹波市  15363
三木市  14765
尼崎市  13433
篠山市  13279
南あわじ市      12762
赤穂市  12290
加西市  11962
淡路市  10373
加東市  9558
西宮市  9162
小野市  9110
高砂市  8593
三田市  8433
宝塚市  8161
西脇市  7439
川西市  6276
太子町  5746
洲本市  5500
垂水区  5468
宍粟市  5222
須磨区  5209
養父市  4870
朝来市  4646
福崎町  4115
長田区  4088
相生市  4073
上郡町  3703
東灘区  3426
新温泉町        3044
香美町  3006
猪名川町        2995
多可町  2775
兵庫区  2653
灘区    2603
中央区  2334
播磨町  1921
芦屋市  1736
佐用町  1031
Time taken: 515.495 seconds, Fetched: 47 row(s)

47県で統合してみる。

SELECT
 jpn.KEN
 ,count(*) cnt 
FROM
 ( 
    SELECT
      ST_Aggr_Union(jpn71.shape) shp
     ,jpn71.KEN
    FROM
     jpn71
    GROUP BY
     jpn71.KEN
  ) jpn
JOIN
 addrwkt
WHERE
 ST_Contains(jpn.shp, ST_Point(addrwkt.lon, addrwkt.lat))
GROUP BY
 jpn.KEN
ORDER BY
 cnt desc;

何故か全ての結果が284071にST_Aggr_Unionでおかしくなってるのか?
1時間程度

…
千葉県  284071
北海道  284071
兵庫県  284071
佐賀県  284071
京都府  284071
三重県  284071
Time taken: 3864.044 seconds, Fetched: 47 row(s)

集計されるデータを一件に絞り込み

SELECT
 jpn.KEN
 ,count(*) cnt 
FROM
 ( 
    SELECT
      ST_Aggr_Union(jpn71.shape) shp
     ,jpn71.KEN
    FROM
     jpn71
    WHERE
     jpn71.KEN LIKE  '%兵庫%'
    GROUP BY
     jpn71.KEN
  ) jpn
JOIN
 addrwkt
WHERE
 ST_Contains(jpn.shp, ST_Point(addrwkt.lon, addrwkt.lat))
GROUP BY
 jpn.KEN
ORDER BY
 cnt desc;

ST_Aggr_Union自体はあっていそう。(GROUP BYする前の結果とExcelの集計が一致)
一度ファイル化しておくべきかな。
(集計関数自体の挙動が違うのかもしれないが…)

兵庫県  525123
Time taken: 186.183 seconds, Fetched: 1 row(s)
カテゴリー: 開発, 設計 タグ: , パーマリンク