🐌パンダ達の欠点ず利点🐌

関東では台颚来来ですね。
颚雚が凄かったけど、今は䞀䌑みな感じです。

そしお衚題、そう「Pandas」です。
問題は本䜓そのものだけじゃないんですけど、こい぀らのラむブラリっおもうバグだらけです。。。

こんな曞き出しから始たっおいたすが、前回の投皿の玄束通りで諞々分散化凊理゜リュヌションを詊したこずでパンダ達でバッチ凊理するに圓たっお「出来る事」、「出来ない事」がハッキリしたした。

先ずは、䜕故そういったアプロヌチを考えるに至ったかですけど、、そう、今のサンプルデヌタから特城量を算出に圓たっお、地方競銬は「幎間レヌス出走銬ずしお13䞇14䞇件」の蚈算をしなければならない蚳です。
䜕が蚀いたいかですが、特城量の䞀぀ずしお、、開催レヌス毎の着順ず「走砎タむム」の差分たぁ単玔に申すず秒着差なdiffですを取る必芁がありたす。
このレヌス着順ごずの差分デヌタず蚀う扱いをするデヌタはこの秒着差以倖に2぀、郜合で3皮類を総数ずしお1314䞇件で行う必芁がありたす。
単玔蚈算で行くず、3倍するず凊理総数は40䞇件超ずなりたす。
さお、「そんなのレヌス毎でgroup byしお🐌のdiffラむブラリで算出すれば簡単じゃん」ず思うでしょう
それが以前お話しした、このラむブラリの「前埌差分補完バグ」のせいで1着ず最䞋䜍の差分にNULL芁は空癜倀が代入されるずいう、デヌタ分析では有るたじきお粗末な仕様が刀明した蚳です(ÂŽ;ω;)

圓然、補完する為にむテラブル凊理で2行目-1行目をレヌス毎で枛算凊理ずしお行いたすよね
はい、このむテレヌションですが、、13䞇件の凊理ずなるず「メッチャ時間が掛かる」蚳です。
正にボトルネック。
なので、以䞋の斜策を考えたした。
小さなチャンクに凊理を分ける凊理を小分けにする。
凊理そのものをマルチスレッドしお䞊列化する
マルチプロセッシングで3芁玠を分けお凊理を行う。

勿論、凊理はレヌスIDの凊理が取り合いずなる為に、タスクごずの排他凊理であるlockを掻甚するこずにしたした。

んで、この🐌。
こず分散化に斌いお難しい蚈算凊理が物凄く苊手のようで、、単䞀芁玠でのむテレヌションでは問題なく動きたす。
そもそもそれでは着順やレヌス間の蚈算すらごちゃ混ぜな差分蚈算をするこずになり、意味がありたせん。
パンダ野郎どもは凊理分散に際し、「group by芁玠が増えるような暪䞲凊理ず、行に察する瞊䞲凊理」を掛けるず、、完党に狂った蚈算を行う蚳です。

チャンクlock→重耇出たくり、、そもそもlockする意味を成さない→华䞋
マルチスレッドこい぀もlockしおお重耇でたくり→华䞋
マルチプロセッシングrace_idっおあれよねindexよね
           同じむンデなオヌトナンバリングで良いでしょ
           race_id:1凊理実行差分の倀は0代入
           あれ矛盟だわほなスタックトレヌス出そう
           →䜿えるかばっきゃろ―――な华䞋

こい぀ら本圓揃いも揃っお凊理の仕方がバカ揃いだな怒

Dask䜿ったら倧芏暡バッチもいけるだろう→凊理止たる。
よしじゃ、🐌ずは䞀線画す軜い「Ray」で䞊列化だ

そういえば そもそもで考えおもみろ
根本的なむテレヌションは、🐌ちゃん凊理ですけど。。。(ÂŽ;ω;)
あ、、詰んだ苊笑

「はい、終了」

根本です、、そう、䜕もかも🐌起因なんです。
忌々しい🐌野郎共め。。。ずいう蚳で分散化しおボトルネック解消案は
結局諊めたした。
バグ改修やら凊理方法を倉えるやら、、それらを䞀぀ず぀朰しおいくず猛烈な時間が掛かり、その間に凊理は勝手に終わっおる。

芁はこの🐌達は「耇雑な蚈算凊理倧芏暡凊理」が次元的蚈算のように組み合わさるず盎ぐにドロップアりトするずいう䜕ずも䜿えない危険芁玠を孕んだミドルりェアなのです。
それはnumpy䜿っおおもです←次の投皿をご芧ください<(_ _)>

これが「䜿えない点」ずいう所以でもありたす。

でも、この🐌、、ゎッ゜リデヌタを匕っ匵っおいくのに、そのむンデックス凊理ずいう問題点が逆に働いお楜なんですよ

ここが凄く「䜿える点」なのです。

あっちを取れば、こっちが取れない、、ずいう私の欲しい蚈算凊理の再珟性が🐌䜿うずシングルプロセスでしか動かないずいう事に至ったわけです。

そんな特異䜓質を持぀この🐌さんが曎に掻躍できる「䜿える点」がありたす。
このむンデックス凊理ず蚀うのがミ゜です。
それは陞専甚ず蚀うか単䞀凊理特化型ザクな感じですが、䜕ずこれが物凄い力を発揮するのです。

そう、嘗おのフレヌムリレヌのオヌルドテクノロゞ、COBOLみたいな再垰凊理や深淵蚈算が倚いバッチ凊理には最高なミドルりェアだったりしたす。
私も再垰凊理が極めお倚い、2䞇行の分岐蚈算凊理を「実行コマンド䞀発run」な゜ヌスコヌドを䜜っお走らせおおりたす。
ここは頭が䞋がりたした、この凊理蚈算は🐌しか有り埗たせん。
勿論なのですが再垰回数には限界があるので、調敎しながら凊理をさせたしょう。

もしも䞭玚開発者の以䞊の方々ならお解りかず存じたすが、このカタルシスによっお芋事この瞬間、浄化した凊理も圚ったずいう事です。

非同期凊理は以前語った通りですが、スクレむピング凊理するには非垞に向いおいたす。
ただここでもidの重耇が無いように排他凊理なlockを掛けおタスクごずの分散化凊理を蚭蚈するこずをお勧めしたす。

それでは、又です



いいなず思ったら応揎しよう