рдордирдорд╛рдиреА рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдкрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реЗрдВ

рднрд╛рдЧ 1: рд╕рдорд╕реНрдпрд╛ рдХрдерди


рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдХреНрд▓реАрд╡рд░рдбрд╛рдЯрд╛ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рд╣реВрдВред рдЖрдЬ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЙрдкрд▓рдмреНрдз рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рджреЛ-рднрд╛рдЧ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

  • рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ (рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓)?
  • рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?
  • рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрддреА рд╣реИрдВ?
  • рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдПрдХреНрдХрд╛-рд╕реНрдЯреНрд░реАрдо рдФрд░ рдПрдХреНрдХрд╛-http рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд░рд┐рдПрдХреНрдЯрд┐рд╡ рд╕реНрдЯреНрд░реАрдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реЛ рдЧрдИ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЖрдЬ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрдерди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд░рд┐рдПрдХреНрдЯрд┐рд╡ рд╕реНрдЯреНрд░реАрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред


рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреНрд▓реАрд╡рд░рдбрд╛рдЯрд╛ рдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреА рдПрдХ рдЯреАрдо рд╣реИ, рдЬреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ (рдЬреИрд╕реЗ рдХрд┐ scikit-learn, facebook fastText, xgboost, TetorFlow, рдЖрджрд┐) рдХреА рдорджрдж рд╕реЗ рдЯреНрд░реЗрди рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдмрдирд╛рддреА рд╣реИред рдбреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рд╡рд╣ рдкрд╛рдпрдерди рд╣реИред рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП, рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдФрд░ рдореБрдЦреНрдп рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдиреНрдпреВрдордкреА рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реИрдВред

рджреВрд╕рд░реА рдУрд░, Hadoop рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЕрд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдПрдЪрдбреАрдПрдлрдПрд╕ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдбреЗрдЯрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдмреНрд▓реЙрдХреЛрдВ (рдЖрдорддреМрд░ рдкрд░ 128 рдПрдордмреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреНрд▓рд╕реНрдЯрд░ рдорд╢реАрдиреЛрдВ рдХреЗ рдмреАрдЪ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЛ рдЙрд╕реА рдорд╢реАрдиреЛрдВ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рд╡реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред

рдмреЗрд╢рдХ, рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯрд╛рд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдВрдЪрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ "рдбреЗрдЯрд╛ рдХреЗ рдХрд░реАрдм рд╕рдВрдЧрдгрдирд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдкреНрд░рдореБрдЦ рд░реВрдкрд░реЗрдЦрд╛, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ Hadoop MapReduce рдФрд░ Apache Spark, рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЕрдиреБрдХреНрд░рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрди рдорд╢реАрдиреЛрдВ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред

рдЪрд┐рддреНрд░ 1. рдПрдЪрдбреАрдПрдлрдПрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХрдИ рдорд╢реАрдиреЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╛рдо рдиреЛрдб рд╣реИ, рдФрд░ рдмрд╛рдХреА рдПрдХ рдбреЗрдЯрд╛ рдиреЛрдб рд╣реИред рдирд╛рдо рдиреЛрдб рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ рдмреНрд▓реЙрдХ рдмрдирд╛рддреА рд╣реИрдВ, рдФрд░ рдЙрди рдорд╢реАрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рд╡реЗ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рдд рд╣реИрдВред рдмреНрд▓реЙрдХ рдЦреБрдж рдХреЛ рдбреЗрдЯрд╛ рдиреЛрдб рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╢реАрдиреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдиреЛрдб рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдп рднреА рдЪрд▓рд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдорд╛рд╕реНрдЯрд░, рдПрдо) рд╕реЗ рдорд┐рд▓рдХрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрди рдорд╢реАрдиреЛрдВ рдкрд░ рдХрд╛рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ (рд╡рд░реНрдХрд░, рдбрдмреНрд▓реНрдпреВ) рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред

Hadoop рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рдШрдЯрдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (JVM) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдЪрдбреАрдПрд╕рдПрдл рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдереЛрдХ рдпрд╣ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рд╣рдбреЛрдк рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╕рдХрд░ рдПрдХреАрдХреГрдд рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╛рд░реНрдХ рдПрдордПрд▓ рдпрд╛ рдЕрдкрд╛рдЪреЗ рдорд╣рддреЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреЗ рдкрд╛рд╕ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╣реБрдд рдХрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ, рд╕рднреА рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рдпрд╣ рддрдереНрдп рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдХреНрд╕рд░ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЬреЛ GPU рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЙрдбрд▓ рдХреЗ рдореБрджреНрджреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЙрдкрд▓рдмреНрдз рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЗрд╕рд▓рд┐рдП, рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдПрдЪрдбреАрдПрдлрдПрд╕ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рдпрджрд┐ рд╣рдо рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╕реНрдкрд╛рд░реНрдХрдПрдордПрд▓ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмреБрдирд┐рдпрд╛рджреА рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдирд╛ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛:

val model: LogisticRegressionModel = LogisticRegressionModel.load("/path/to/model") val dataset = spark.read.parquet("/path/to/data") val result = model.transform(dataset) 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗрд╡рд▓ рд╕реНрдкрд╛рд░реНрдХрдПрдордПрд▓ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ )ред рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЗрд╡реАрдПрдо рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдореЙрдбрд▓ рдХреЛ REST рд╕реЗрд╡рд╛ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рддрджрдиреБрд╕рд╛рд░, рдПрдЪрдбреАрдПрдлрдПрд╕ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдЙрди рдорд╢реАрдиреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдорд╢реАрди (рдпрд╛ рдорд╢реАрдиреЛрдВ рдХрд╛ рдХреНрд▓рд╕реНрдЯрд░) рдЬрд┐рд╕ рдкрд░ рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗрд╡рд╛ рдЪрд▓ рд░рд╣реА рд╣реИред

рдЪрд┐рддреНрд░ 2. рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛

рдкрд╛рдпрдерди рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд░рдг


рдореЙрдбрд▓ рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

  1. HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рддрдХ рдХреБрд╢рд▓ рдкрд╣реБрдВрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛;
  2. рдорд╢реАрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдФрд░ рдореЗрдореЛрд░реА) рдХрд╛ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ;
  3. рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░реЛрдз рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ;
  4. рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░реАрд╕реНрдЯ рдПрдХреНрд╕реЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрди рдорд╛рдЗрдХреНрд░реЛрдлреНрд░реЗрдо рдореЗрдВ рд╕реЗ рдПрдХ рдлреНрд▓рд╛рд╕реНрдХ рд╣реИ ред рдлреНрд▓рд╛рд╕реНрдХ рдкрд░ рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗрд╡рд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

 from flask import Flask, request, Response model = load_model() n_features = 100 app = Flask(__name__) @app.route("/score", methods=['PUT']) def score(): inp = np.frombuffer(request.data, dtype='float32').reshape(-1, n_features) result = model.predict(inp) return Response(result.tobytes(), mimetype='application/octet-stream') if __name__ == "__main__": app.run() 

рдпрд╣рд╛рдВ, рдЬрдм рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдореЙрдбрд▓ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд░реНрдЧреАрдХрд░рдг рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЛрдб_рдореЙрдбрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рд╕реЗ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рдХреБрдВрдЬреА-рдореВрд▓реНрдп рднрдВрдбрд╛рд░рдг, рдЖрджрд┐ рд╣реЛред

рдПрдХ рдореЙрдбрд▓ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╡рд┐рдзрд┐ рд╣реИред рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдХреБрдЫ рдлреАрдЪрд░ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдпрд╛ рддреЛ рдПрдХ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реЗрдХреНрдЯрд░ рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдпрд╛ 0 рд╕реЗ 1 рддрдХ рдХреЗ рдХреБрдЫ рдореВрд▓реНрдп рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдХрдЯрдСрдл рдереНрд░реЗрд╢реЛрд▓реНрдб рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рджрд╣рд▓реАрдЬ рдХреЗ рдКрдкрд░ рд╕рдм рдХреБрдЫ, рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдмрд╛рдХреА рдирд╣реАрдВ рд╣реИред

рдлрд╝реАрдЪрд░ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╣рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реБрд╕реНрдкрд╖реНрдЯ рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдУрд╡рд░рд╣реЗрдб рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 100-рдЖрдпрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рдЯрд╛рдЗрдк рдлрд╝реНрд▓реЛрдЯ 32 рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣реЗрдбрд░реНрд╕ рд╕рд╣рд┐рдд рдПрдХ рдкреВрд░реНрдг HTTP рдЕрдиреБрд░реЛрдз, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 PUT /score HTTP/1.1 Host: score-node-1:8099 User-Agent: curl/7.58.0 Accept: */* Content-Type: application/binary Content-Length: 400 [400 bytes of data] 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рджрдХреНрд╖рддрд╛ рдмрд╣реБрдд рдХрдо рд╣реИ (рдкреЗрд▓реЛрдб рдХреЗ 400 рдмрд╛рдЗрдЯреНрд╕ / (133 рдмрд╛рдЗрдЯреНрд╕ рд╣реЗрдбрд░ + 400 рдмрд╛рдЗрдЯреНрд╕ рдмреЙрдбреА) = 75%)ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓рдЧрднрдЧ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкрджреНрдзрддрд┐ рдЖрдкрдХреЛ [1 xn] рд╡реЗрдХреНрдЯрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ [mxn] рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдореА рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрдбрд╝реЗ рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕рднреА рдЙрдкрд▓рдмреНрдз рдорд╢реАрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрдЪрд░ рд╡реИрдХреНрдЯрд░ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдореИрдЯреНрд░рд┐рдХреНрд╕ [mxn] рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд░реНрдЧреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗрдХреНрдЯрд░ [mx 1] рдХреЛ рдмреВрд▓рд┐рдпрди рдпрд╛ flox32 рдорд╛рдиреЛрдВ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, 1000 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп HTTP рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рджрдХреНрд╖рддрд╛ рд▓рдЧрднрдЧ 100% рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ HTTP рд╣реЗрдбрд░ рдХрд╛ рдЖрдХрд╛рд░ рдЙрдкреЗрдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдлреНрд▓рд╛рд╕реНрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рдФрджреНрдпреЛрдЧрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдлреНрд▓рд╛рд╕реНрдХ рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╣реИ рдФрд░, рдпрджрд┐ рд╣рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдЖрд░реЗрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕реЗрд╡рд╛ рдЪрд▓ рд░рд╣реА рд╣реИ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдХреЛрд░ 100% рд▓реЛрдб рд╣реИ, рдФрд░ рдмрд╛рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдорд╢реАрди рдХреЗ рд╕рднреА рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ: рдЗрд╕рдХреЗ рд▓рд┐рдП, рдлреНрд▓рд╛рд╕реНрдХ рдХреЛ uwsgi рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓реЛрдб рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Uwsgi рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

HTTP рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ nginx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ uwsgi рдЕрд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдирдЧреНрдиреЗрдХреНрд╕ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдкреВрд░реНрдг рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд▓реЗ рд▓реЗрддрд╛ рд╣реИ, рдЕрдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ uvgi рдкрд░ рд▓реЛрдб рдЦреЛ рджреЗрддрд╛ рд╣реИред Nginx рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдирдХреНрд╕ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ uwsgi рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг nginx рд╡рд┐рдиреНрдпрд╛рд╕ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 server { listen 80; server_name 127.0.0.1; location / { try_files $uri @score; } location @score { include uwsgi_params; uwsgi_pass unix:/tmp/score.sock; } } 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд▓рд╛ред рдпрджрд┐ рд╣рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕реЗрд╡рд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдЖрдПрдВрдЧреЗ, рдФрд░ рдпрд╣ рдЕрдбрд╝рдЪрди рдмрди рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╣реИред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдПрдХ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╢реАрдиреЛрдВ рдкрд░ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЬреИрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг Dockerfile рд╕рдВрд░рдЪрдирд╛ рдиреАрдЪреЗ рджреА рдЧрдИ рд╣реИред

 FROM ubuntu #Installing required ubuntu and python modules RUN apt-get update RUN apt-get -y install python3 python3-pip nginx RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 RUN update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 RUN pip install uwsgi flask scipy scikit-learn #copying script files WORKDIR /etc/score COPY score.py . COPY score.ini . COPY start.sh . RUN chmod +x start.sh RUN rm /etc/nginx/sites-enabled/default COPY score.nginx /etc/nginx/sites-enabled/ EXPOSE 80 ENTRYPOINT ["./start.sh"] 

рддреЛ, рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдЪрд┐рддреНрд░рд╛ 3. рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдпреЛрдЬрдирд╛

рд╣рд╛рдбреЛрдк рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢


рдЕрдм рдПрдЪрдбреАрдПрдлрдПрд╕ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдореНрдкреНрдпреВрдЯреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдорд╢реАрдиреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рд╕рдордиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдореБрдЦреМрдЯреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд░реЗрдВ, рдЖрджрд┐ред

рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп Hadoop рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдврд╛рдБрдЪреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреВрд░рд╛ рдврд╛рдВрдЪрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЖрд░рдбреАрдбреА (рд░реЗрдЬрд┐рд▓рд┐рдПрдВрдЯ рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯреЗрдб рдбреЗрдЯрд╕реЗрдЯ)ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, RDD рдХреЛ рдПрдХ рд╡рд┐рддрд░рд┐рдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдбреНрд░реЙрдк-рдкреНрд░рддрд┐рд░реЛрдзреА рд╣реИред RDD рдХреЛ рджреЛ рдореБрдЦреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рд╕реЗ рдирд┐рд░реНрдорд╛рдг, рдЬреИрд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдЖрджрд┐ред
  2. рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдЪрд╛рд▓рди рд▓рд╛рдЧреВ рдХрд░рдХреЗ рджреВрд╕рд░реЗ RDD рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдгред RDD рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореИрдк, рдлреНрд▓реИрдЯрдкрд╛рдЗрдк, рдлрд┐рд▓реНрдЯрд░, рдЧреНрд░реБрдкрдмреА, рдЬреЙрдЗрди, рдЖрджрд┐ред

рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ RDD, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдЪрд╛рд▓рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдмрд╕ рдПрдХ рдирдпрд╛ рдЖрд░рдбреАрдбреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдФрд░ рдСрдкрд░реЗрд╢рди рд╣реЛрдЧрд╛ред рддрдерд╛рдХрдерд┐рдд рдЯрд░реНрдорд┐рдирд▓ рд╕рдВрдЪрд╛рд▓рди, рдпрд╛ рдХреНрд░рд┐рдпрд╛рдПрдВ, рдЬрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрдирдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрдирд╛, рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рд╣реЗрдЬрдирд╛, рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЧрд┐рдирдирд╛ рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЯрд░реНрдорд┐рдирд▓ рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдкрд╛рд░реНрдХ рдПрдХ рдПрд╕реАрдбреАрд╕реА рдСрдкрд░реЗрд╢рди рдЧреНрд░рд╛рдл (рдбреАрдПрдЬреА, рдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл) рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрд░рдбреАрдбреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЧреНрд░рд╛рдл рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред RDD рдкрд░ рдЖрдзрд╛рд░рд┐рдд DAG рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рд╕реНрдкрд╛рд░реНрдХ рдХрдИ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдПрдХ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдХрдИ рдХреНрд░рдорд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

RDD рд╕реНрдкрд╛рд░реНрдХ 1.x рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реНрдкрд╛рд░реНрдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рдореБрдЦреНрдп рдЗрдХрд╛рдИ рдереАред рд╕реНрдкрд╛рд░реНрдХ 2.x рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЕрдм рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИред рдбреЗрдЯрд╛рд╕реЗрдЯ SQL-рдЬреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде RDD рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдб-рдСрди рд╣реИред рдбреЗрдЯрд╛рд╕реИрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдкрд╛рд░реНрдХ рдЖрдкрдХреЛ рдХрд╛рдлреА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд рдЕрдиреБрдХреВрд▓рди рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдЬреЛ RDD рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рднреА рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

рд╕реНрдкрд╛рд░реНрдХ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЗрдП рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдкрд╛рд░реНрдХ рдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдмрд▓реНрдХрд┐ рдЕрд░реНрдерд╣реАрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкрд╛рда рдореЗрдВ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдиреБрдкрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдкрд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓ рдЪрд░рдгреЛрдВ рдкрд░ рд╕реАрдзреЗ рдзреНрдпрд╛рди рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

 case class Data(id: String, text: String) case class Features(id: String, vector: Array[Float]) case class Score(id: String, score: Float) //(1) def std(vector: Array[Float]): Float = ??? //(2) val ds: Dataset[Data] = spark.read.parquet("/path/to/data").as[Data] //(3) val result: Dataset[Score] = ds.map {d: Data => //(4) val filteredText = d.text.toLowerCase.filter { letter => 'a' <= letter && letter <= 'z' } val featureVector = new Array[Float](26) if (filteredText.nonEmpty) { filteredText.foreach(letter => featureVector(letter) += 1) featureVector.indicies.foreach { i => featureVector(i) = featureVector(i) / filteredText.length() } } Features(d.id, featureVector) }.map {f: Features => Score(f.id, std(f.vector)) //(5) } result.write.parquet("/path/to/result") //(6) 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо:

  1. рд╣рдо рдЗрдирдкреБрдЯ, рдордзреНрдпрд╡рд░реНрддреА рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдХреБрдЫ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдордзреНрдпрд╡рд░реНрддреА рдбреЗрдЯрд╛ рдлреАрдЪрд░ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ);
  2. рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ);
  3. рдкрде / рдкрде / рд╕реЗ / рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд▓рдХрдбрд╝реА рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ HDFS рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ;
  4. рдореВрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рдмрд┐рдЯрдореИрдк рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
  5. рдЗрд╕реА рддрд░рд╣, рд╣рдо рдордзреНрдпрд╡рд░реНрддреА рд╕реЗ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛рд╕реЗрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ;
  6. рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдПрдЪрдбреАрдПрдлрдПрд╕ рдХреЛ рдкрде / рдкрде / рдкрд░рд┐рдгрд╛рдо / рдХреЗ рд╕рд╛рде рд╕рдорд╛рдВрддрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред рдЪреВрдВрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЗрд╕ рдЪрд░рдг рдореЗрдВ рдЧрдгрдирд╛ рд╕реНрд╡рдпрдВ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИред

рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдорд╛рд╕реНрдЯрд░-рд╡рд░реНрдХрд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЪрд╛рд▓рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЖрд░рдбреАрдбреА рдХреЗ рдЧрдарди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдЬрдм рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдСрдкрд░реЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЪрд╛рд▓рдХ рдкрд░рд┐рдгрд╛рдореА RDD рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ DAG рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдбреНрд░рд╛рдЗрд╡рд░ рдирд┐рд╖реНрдкрд╛рджрдХ рдирд╛рдордХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рд╢реБрд░реВрдЖрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЪрд╛рд▓рдХ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмреНрд▓реЙрдХ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЗ рдХрд┐рд╕ рднрд╛рдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдХреЛрдб рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдХреЗ рдЙрди рдЦрдВрдбреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрдХ (рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд╖реНрдкрд╛рджрдХ рднрд╛рдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрдХ рднрд╛рдЧ рдЕрдВрдд) рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдХреА рдХреЛрдб рдбреНрд░рд╛рдЗрд╡рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 case class Data(id: String, text: String) case class Features(id: String, vector: Array[Float]) case class Score(id: String, score: Float) def std(vector: Array[Float]): Float = ??? val ds: Dataset[Data] = spark.read.parquet("/path/to/data").as[Data] val result: Dataset[Score] = ds.map { // --------------- EXECUTOR PART BEGIN ----------------------- d: Data => val filteredText = d.text.toLowerCase.filter { letter => 'a' <= letter && letter <= 'z' } val featureVector = new Array[Float](26) if (filteredText.nonEmpty) { filteredText.foreach(letter => featureVector(letter) += 1) featureVector.indicies.foreach { i => featureVector(i) = featureVector(i) / filteredText.length() } } Features(d.id, featureVector) // --------------- EXECUTOR PART END ----------------------- }.map { // --------------- EXECUTOR PART BEGIN ----------------------- f: Features => Score(f.id, std(f.vector)) // --------------- EXECUTOR PART END ----------------------- } result.write.parquet(тАЬ/path/to/resultтАЭ) 

Hadoop рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ, рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред рдПрдХ рдХрдВрдЯреЗрдирд░ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдорд╢реАрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рд╢рд┐ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг YARN рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдорд╢реАрди рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдФрд░ рд░реИрдо рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рд╕реНрдкрд╛рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп, YARN рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдорд╢реАрди рдкрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЪрд╛рд▓рдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдЬрдм рдЪрд╛рд▓рдХ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдбреАрдПрдЬреА рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ YARN рд╡рд╛рдВрдЫрд┐рдд рдорд╢реАрдиреЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдПрдХ рдХреЛрд░ рдФрд░ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдЬрдм рддрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рддрдм рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд▓рдХ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрд░ рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрдХ рдПрдХ рд╕рд╛рде рдХрдИ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдпрд╛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, YARN рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреВрд╕рд░реЗ рдирд┐рд╖реНрдкрд╛рджрдХ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд╣рдо рдкреНрд░рддрд┐ рдХрдВрдЯреЗрдирд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЛрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╛рд░реНрди рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдорд╢реАрдиреЗрдВ рд╣реИрдВ рдЬрд┐рди рдкрд░ рджреЛ рдХреЛрд░ рдЕрдиреБрдкрдпреЛрдЧреА рд░рд╣ рдЧрдП рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдкрд░ рджреЛ рдХреЛрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдРрд╕реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдХреЛрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ 2 рдЯреЗрд░рд╛рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЕрдЧрд░ рдПрдЪрдбреАрдПрдлрдПрд╕ рдкрд░ рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ 128 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╣реИ, рддреЛ рдХреБрд▓ 16384 рдмреНрд▓реЙрдХ рд╣реЛрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╢реАрдиреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛рд░рдХ рдХреЛ рджреЛ рдХреЗ рдмрд░рд╛рдмрд░ рд▓реЗрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ 32768 рдЙрдкрд▓рдмреНрдз рдмреНрд▓реЙрдХ рд╣реЛрдВрдЧреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП 16 рдорд╢реАрдиреЛрдВ рдХреЗ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рд╕рдорд╛рди рд╡рд┐рддрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдкрд░ рд▓рдЧрднрдЧ 2048 рдмреНрд▓реЙрдХ, рдпрд╛ рдкреНрд░рддрд┐ рдорд╢реАрди 256 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╣реЛрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 8 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдФрд░ 64 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд░реИрдо рд╣реИред

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП 1 рдХреЛрд░ рдФрд░ 1 рдЬреАрдмреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЛ 2 рдХреЛрд░ рдФрд░ 4 рдЬреАрдмреА рдореЗрдореЛрд░реА рджреЗрдВрдЧреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХрддрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо 64 рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ: рдЪрд╛рд▓рдХ рдХреЗ рд▓рд┐рдП рдПрдХ, рдФрд░ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП 63ред

рдЪрд┐рддреНрд░рд╛ 4. рдбреЗрдЯрд╛ рдиреЛрдб рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВред

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдбреАрдПрдЬреА рдореЗрдВ рдПрдХ рдСрдкрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. рд╕реНрдерд╛рдиреАрдп рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд▓реЗрдВ,
  2. рдбреЗрдЯрд╛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВ
  3. рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХ рдкрд░ рдирдП рдмреНрд▓реЙрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рд╣реЗрдЬреЗрдВред

рдХреБрд▓ рдореЗрдВ, рд╣рдореЗрдВ 16384 рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЛ 16384 / (63 рдирд┐рд╖реНрдкрд╛рджрдХ * 2 рдХреЛрд░) = 130 рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рд╖реНрдкрд╛рджрдХ рдХрд╛ рдЬреАрд╡рди рдЪрдХреНрд░ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ (рдпрджрд┐ рд╕рдм рдХреБрдЫ рдмрд┐рдирд╛ рдЧрд┐рд░ рдЬрд╛рдП) рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦреЗрдЧрд╛ред

  1. рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ
  2. рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдСрдкрд░реЗрд╢рди рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рджреЛ рдХреЛрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдереЗ, рдЗрд╕рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рдХрд╛рд░реНрдп рдорд┐рд▓рддреЗ рд╣реИрдВред
  3. рдПрдХ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрдирд╛ред
  4. рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЪрд░рдг 2 рдФрд░ 3 рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдХреЗ рд╕рднреА рдмреНрд▓реЙрдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗред
  5. рдХрдВрдЯреЗрдирд░ рд╕реНрдЯреЙрдк

рдиреЛрдЯ : рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбреАрдПрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдорд╢реАрдиреЛрдВ рдХреЗ рдмреАрдЪ рдордзреНрдпрд╡рд░реНрддреА рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рд╕рдореВрд╣ рд╕рдВрдЪрд╛рд▓рди (рдЧреНрд░реБрдкрдмрд╛рдп, рдХрдордмреИрдХ, рдЖрджрд┐) рдФрд░ рдХрдиреЗрдХреНрд╢рди (рд╢рд╛рдорд┐рд▓) рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдФрд░ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ


рдпрджрд┐, рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рд╣рдореЗрдВ рдХреБрдЫ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдХрдо рддреБрдЪреНрдЫ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ:

 val client = ExternalServiceClient.create() // val score = client.score(featureVector) // . 

рдЖрдорддреМрд░ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдпрд╛ рдкреВрд▓ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╕реНрдкрд╛рд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рдПрдХ рдХрд╛рд░реНрдп рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкрд╣рд▓реЗ рд╕реЗ рдЖрд░рдВрднрд┐рдХ рдЧреНрд░рд╛рд╣рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╕реНрдкрд╛рд░реНрдХ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреНрд░рдордмрджреНрдз рд╣реИ (рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрд╡рдпрдВ рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдлрд╝реАрд▓реНрдб java.io.Serializable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП), рддреЛ рдЗрд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд░ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреНрд░рд╕рд╛рд░рдг рдЪрд░ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 val client = ExternalServiceClient.create() val clientBroadcast = sparkContext.broadcast(client) ds.map { f: Features => val score = clientBroadcast.value.score(f.vector) Score(f.id, score) } 

рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреНрд░рдорд┐рдХ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЖрд░рдВрдн рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╢реАрди рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╢реАрдиреЛрдВ рдХреЗ рдПрдХ рднрд╛рдЧ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗрд╡рд╛ рдорд╢реАрди рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реЗ рд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП) рддрдм рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрдХ рдкрд░ рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, RDD (рдФрд░ рдбреЗрдЯрд╛рд╕реЗрдЯ) рдореЗрдВ рдореИрдкрдкрд╛рд░реНрдЯрд┐рд╢рди рдСрдкрд░реЗрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдореИрдк рдСрдкрд░реЗрд╢рди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк рдЖрд░рдбреАрдбреА рд╡рд░реНрдЧ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдк рдСрдкрд░реЗрд╢рди рдореИрдк рдореИрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдореИрдкрдкрд╛рд░реНрдЯрд┐рд╢рди рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмреНрд▓реЙрдХ рд╕реЗ рдкрдврд╝реЗрдВрдЧреЗ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдиреБрд░реВрдк рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ рдХреЛ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП:

 ds.mapPartitions {fi: Iterator[Features] => val client = ExternalServiceClient.create() fi.map { f: Features => val score = client.score(f.vector) Score(f.id, score) } } 

рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдПрдХ рдмрд╛рд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкрд░рд┐рдгрд╛рдореА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЪрд╛рд▓рди рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╣реИред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдЗрдЯреНрд░реЗрдЯрд░ рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдкреИрдЯрд░реНрди hasNext рдФрд░ рдЕрдЧрд▓реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░рдорд┐рдХ рдХреЙрд▓ рд╣реИ:

 while (i.hasNext()) { val item = i.next() тАж } 

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рджреЛ рдХреЛрд░ рдЖрд╡рдВрдЯрд┐рдд рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рджреЛ рдореБрдЦреНрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╣реЛрдВрдЧреЗ рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╢реАрди рдкрд░ 8 рдХреЛрд░ рд╣реИрдВ, рддреЛ YARN рдЗрд╕реЗ 2 рдХреЛрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреА 4 рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛, рдХреНрд░рдорд╢рдГ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рдорд╢реАрди рдХреЗрд╡рд▓ 8 рдзрд╛рдЧреЗ рд╣реЛрдВрдЧреЗред рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдХрд╛ рдЕрдзрд┐рдХрддрдо рднрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд╕реНрд╡реАрд░ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред

рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рд╣реИ: рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдереНрд░реЗрдб рдЬреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдЗрд╕ рд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣реИрдирдХреНрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЬрд╡рд╛рдм рдорд┐рд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрддреНрд╡ рд╣реИрдВред рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣рдордиреЗ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдерд╛ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЦрд╛рд▓реА рдпрд╛ рдЧреИрд░-рдЦрд╛рд▓реА рдЙрддреНрддрд░ рджреЗрдЧрд╛) рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╡рд╛рдм рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП,рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдПрдХ рдЕрд╡рд░реБрджреНрдз рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ ред

рдЪрд┐рддреНрд░ 5. рдореИрдкрдкрд╛рд░реНрдЯрд┐рд╢рди рдореЗрдВ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЗрдЯреНрд░реЗрдЯрд░ рдХрд╛ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рд╣реА рдзрд╛рдЧреЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЕрдХреНрд╖рдо рдЙрдкрдпреЛрдЧ рдорд┐рд▓рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рд╣рдордиреЗ рдЕрдкрдиреА рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗрд╡рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗред рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рдореВрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕реЗрд╡рд╛ рдореЗрдВ рднреЗрдЬреЗрдВ, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рдгрд╛рдореА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬрд╛рд░реА рдХрд░реЗрдВред

рдЪрд┐рддреНрд░ 6. рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╕рдордп рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмрд╛рддрдЪреАрдд

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрд╡рд░реБрджреНрдз рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░, рджреВрд╕рд░реЗ, рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдмреЗрдХрд╛рд░ рд╣реИ рдЬрдмрдХрд┐ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдХреНрд╕реЗрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдкреВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд┐рдЫрд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдорд╢реАрди рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд╡рд░реБрджреНрдз рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдЪрд╛рд░ рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдзрд╛рд░рд╛рдПрдБ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рд▓рдЧрд╛рддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдзрд╛рд░рд╛ рддрджрдиреБрд╕рд╛рд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ рд▓реЗ рдЬрд╛рдПрдЧреАред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред

  1. , , , .
  2. , , . , . , .
  3. рдкрд░рд┐рдгрд╛рдореА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдЧрд▓рдд рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП hasNext рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рдмрдлрд░ рдореЗрдВ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдпрджрд┐, рдЕрдЧрд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореВрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ hasNext = false рд╣реИ, рддреЛ, рддрджрдиреБрд╕рд╛рд░, рдХреЛрдИ рдФрд░ рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рд╕рдордиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬрддреЗ рд╣реИрдВред

рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╣рдо рдХреИрд╕реЗ рд╕рдХреНрд╖рдо рдереЗ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ ред рджреЗрдЦрддреЗ рд░рд╣реЛ!

рдЗрд╕ рдмреАрдЪ, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреА рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рд╢рд╛рдпрдж рд╣рдо рдЖрдкрдХреЛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/hi413137/


All Articles