2
テーブルハイブで最も近い隣人を見つけるには?どの窓関数ですか?
$cat data.csv ID,State,City,Price,Flag 1,CA,A,95,0 2,CA,A,96,1 3,CA,A,195,1 4,NY,B,124,0 5,NY,B,128,1 6,NY,C,24,0 7,NY,C,27,1 8,NY,C,29,0 9,NY,C,39,1
期待される結果を考える:上記のフラグ= 0と各IDについて
ID0, ID1
1,2
4,5
6,7
8,7
を、私たちは "同じで、フラグ= 1から別のIDを見つけたいです「州」と「市」、および最も近い価格。
私は2つのラフな愚かなアイデアを持っている:
方法1.
Use a left outer join with the table itself on
(a.State=b.State and a.City=b.city and a.Flag=0 and b.Flag=1),
where a.Flag=0 and b.Flag=1,
and then use RANK() over (partitioned by a.State,a.City order by a.Price - b.Price) as rank
where rank=1
方法2
Use a left outer join with the table itself,
on
(a.State=b.State and a.City=b.city and a.Flag=0 and b.Flag=1),
where a.Flag=0 and b.Flag=1,
and then Use Distribute by a.State,a.City Sort by Price_Diff ASC limit 1
ハイブにおける最近傍を見つけるための最善の方法は何ですか? 貴重なアドバイスをいただければ幸いです!