10 рдорд┐рдирдЯ рдореЗрдВ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╕реАрдЦреЗрдВ

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



рдЖрдЬ рд╣рдо рдЬрд┐рд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдореЗрдЯрд╛рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╣реИред

рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХреНрдпрд╛ рд╣реИ?


рдиреАрдЪреЗ рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдореЗрдВ рдореЗрдЯрд╛рдлреНрд▓реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЧреНрд░рд╛рдл рд╣реИред


рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдореЗрдВ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдирд╡рдВрдмрд░ 2018 рдореЗрдВ, рдХрдВрдкрдиреА рдХреЗ 134 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдбреЗрдЯрд╛ рд╡рд┐рдЬреНрдЮрд╛рди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:

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

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

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


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

рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкрд░рд┐рджреГрд╢реНрдп


рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рд╕рд╣рдпреЛрдЧред рдПрдХ рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рджреВрд╕рд░реЗ рдХреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╕рд╣рд╛рдпрдХ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдкреВрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
  • рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдЙрдиреНрд╣реЗрдВ рд░реЛрдХрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣рд╛рдВ рд╕реЗ рд░реБрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ред рдХреБрдЫ рдХрд╛рд░реНрдп рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмрдВрдж рд╣реЛ рдЧрдП (рдпрд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рд░реЛрдХрд╛ рдЧрдпрд╛ рдерд╛)ред рддреНрд░реБрдЯрд┐ рдареАрдХ рдХреА рдЧрдИ (рдпрд╛ рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдХрд╛рд░реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЙрд╕рдХрд╛ рдХрд╛рдо рдЙрд╕ рд╕реНрдерд╛рди рд╕реЗ рдЬрд╛рд░реА рд░рд╣реЗ рдЬрд╣рд╛рдВ рд╡рд╣ рд╡рд┐рдлрд▓ рд░рд╣рд╛ (рдпрд╛ рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
  • рд╣рд╛рдЗрдмреНрд░рд┐рдб рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрдиред рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд╢рд╛рдпрдж рдпрд╣ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЪрд░рдг рд╣реИ), рдФрд░ рдПрдХ рдЕрдиреНрдп рдЪрд░рдг рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╢рд╛рдпрдж рдпрд╣ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ) рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдЯрд╛рд╕реНрдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рдкрд░реАрдХреНрд╖рд╛ред рддреАрди рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдПрдХ рд╣реА рдореЙрдбрд▓ рдХреЗ рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЪрдпрди рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВ, рдЗрд╕ рдореЙрдбрд▓ рдХреА рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЦреБрдж рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рдпрд╛ рд╣реИред
  • рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреЗрд▓реЗрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 0.20 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рд╕рдВрд╕реНрдХрд░рдг 0.22 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ


рд╡реИрдЪрд╛рд░рд┐рдХ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдореЗрдЯрд╛рдлреНрд▓реЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдореЗрдВ atConceptual рджреЗрдЦреЛ


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


рд░реЗрдЦреАрдп рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл


"рд╕рдорд╛рдирд╛рдВрддрд░" рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЪрдХреНрд░реАрдп рдЧреНрд░рд╛рдл

рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЪрд░рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

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

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

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ тЦН рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣


рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ (рд╕реНрдЯреНрд░реАрдо) рдХреЛ рдПрдХ рдорд╛рдирдХ рдкрд╛рдпрдерди рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдо рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ Flow рд╢рдмреНрдж рд╣реЛрддрд╛ рд╣реИ) рдпрджрд┐ рдпрд╣ рдирд┐рдореНрди рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ:

  • рд╡рд░реНрдЧ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ FlowSpec рд╡рд░реНрдЧ рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИред
  • рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рдЪрд░рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ @step рдбреЗрдХреЛрд░реЗрдЯрд░ @step ред
  • рдкреНрд░рддреНрдпреЗрдХ @step рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: self.next(self.function_name_here) ред
  • рдХрдХреНрд╖рд╛ start рдФрд░ end рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рддреАрди рдиреЛрдбреНрд╕ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдиреНрдпреВрдирддрдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЙрд╕рдХреА рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 start тЖТ process_message тЖТ end 

рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:

 from metaflow import FlowSpec, step class LinearFlow(FlowSpec):         """     ,      Metaflow.    """       #         @step    def start(self):        self.message = 'Thanks for reading.'        self.next(self.process_message)    @step    def process_message(self):        print('the message is: %s' % self.message)        self.next(self.end)    @step    def end(self):        print('the message is still: %s' % self.message) if __name__ == '__main__':    LinearFlow() 

рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢


StInstallation рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ


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

  • рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рдкрд╛рдпрдерди 3 рдЕрдиреБрд╢рдВрд╕рд┐рдд): pip3 install metaflow 3 pip3 install metaflow ред
  • рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ ( рдпрд╣рд╛рдБ рдпрд╣ GitHub рдкрд░ рд╣реИ) рдХреЛ linear_flow.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВред
  • рдЗрд╕ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, python3 linear_flow.py show рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • рд╕реНрдЯреНрд░реАрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, python3 linear_flow.py run ред

рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕рдлрд▓ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ

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

Cond рдЕрдВрддрд░реНрд╡реЗрд╢рди рдФрд░ рдХреЙрдиреНрдбрд╛ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ (рдпрджрд┐ рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ)


рдХреЛрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:


рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреЛрдВрдбрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЙрджрд╛рд╣рд░рдг


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

тЦНZadanie


рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдПрдВ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

  • рдПрдХ рдкрдВрдбреЛрдВ рдХреЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдореЗрдВ рд╕реАрдПрд╕рд╡реА рдореВрд╡реА рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред
  • рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрддреБрд░реНрдердХ рдХреА рд╕рдорд╛рдирд╛рдВрддрд░ рдЧрдгрдирд╛ред
  • рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ред

тЦН рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛


GenreStatsFlow рд╡рд░реНрдЧ рдХрд╛ рдХрдВрдХрд╛рд▓ GenreStatsFlow рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ GenreStatsFlow ред рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭреЗрдВрдЧреЗред

 from metaflow import FlowSpec, step, catch, retry, IncludeFile, Parameter class GenreStatsFlow(FlowSpec):  """    ,  ,   .         :    1)  CSV-   Pandas.    2)     .    3)     .  """   @step  def start(self):    """         :        1)      Pandas.        2)    .        3)        .    """       # TODO:  CSV         self.genres = []    self.next(self.compute_statistics, foreach='genres') #  1     @catch(var='compute_failed') #  2  @retry(times=1) #  3  @step  def compute_statistics(self):    """    .   ."""    self.genre = self.input #  4    # TODO:        self.next(self.join)     @step  def join(self, inputs):    """       ."""    # TODO:      self.next(self.end)     @step  def end(self):      """End the flow."""      pass   if __name__ == '__main__':  GenreStatsFlow() 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХреЛрдб рдореЗрдВ рдлрд╝реЙрд░реНрдо # n рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдиреАрдЪреЗ рджреЗрдЦреЗрдВрдЧреЗред

  • 1 рдореЗрдВ, start рдЪрд░рдг рдореЗрдВ, foreach рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, compute_statistics рд╕реВрдЪреА рдореЗрдВ for each рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ for each рд▓реВрдк рдХреЗ compute_statistics рдореЗрдВ compute_statistics рдЪрд░рдгреЛрдВ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ compute_statistics рдЬрд╛рддреА рд╣реИрдВред
  • 2 @catch(var='compute_failed') рдбреЗрдХреЛрд░реЗрдЯрд░ @catch(var='compute_failed') рдЪрд░рдг compute_statistics рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж @catch(var='compute_failed') рдкрдХрдбрд╝ @catch(var='compute_failed') рдФрд░ рдЗрд╕реЗ compute_failed рдЪрд░ рдореЗрдВ рд▓рд┐рдЦ рджреЗрдЧрд╛ (рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
  • 3 @retry(times=1) рдбреЗрдХреЛрд░реЗрдЯрд░ @retry(times=1) рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХрд╛ рдирд╛рдо рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЬрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рд╡рд╣ рдХрджрдо рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред
  • 4 , self.input , self.input ? рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐, input рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╡рд░реНрдЧ рдЪрд░ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ compute_statistics рд▓рд╛рдЧреВ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ (рдЬрдм рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реИрдВ)ред рдпрд╣ рдЪрд░ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рджреНрд╡рд╛рд░рд╛ рддрднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдиреЛрдбреНрд╕ рдХреЛ рдХрдИ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЬрдм рдХрдИ рдиреЛрдбреНрд╕ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред
  • рдпрд╣рд╛рдБ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ - compute_statistics рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдПрдХ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 1 рдореЗрдВ рдЬреЛ рдХреБрдЫ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ self.next(self.func1, self.function2, self.function3) ред рдмреЗрд╢рдХ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╕рдореНрдорд┐рд▓рд┐рдд рдХрджрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдКрдкрд░ рдХрдВрдХрд╛рд▓ рд╡рд░реНрдЧ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


GenreStatsFlow рд╡рд░реНрдЧ рдХрд╛ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡

тЦНRead рдбрд╛рдЯрд╛ рдлрд╛рдЗрд▓ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреИрд░рд╛рдореАрдЯрд░


  • рдЗрд╕ рдлрд┐рд▓реНрдо CSV рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред
  • рдЕрдм рдЖрдкрдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ movie_data рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрде рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдФрд░ max_genres рд▓рд┐рдП max_genres рдорд╛рди рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рд▓реИрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╛рд╣рд░реА рддрд░реНрдХреЛрдВ рдХрд╛ рддрдВрддреНрд░ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдЖрдкрдХреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: python3 tutorial_flow.py run --movie_data=path/to/movies.csv --max_genres=5 ред
  • рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдбреЗрд╡рд▓рдкрд░ IncludeFile рдФрд░ Parameter рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрдб рдореЗрдВ рдЗрдирдкреБрдЯ рдкрдврд╝рдиреЗ рджреЗрддрд╛ рд╣реИред рд╣рдо рдХреНрд▓рд╛рд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореЗрдВ IncludeFile рдФрд░ Parameter рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ IncludeFile рдЧрдП рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдлрд╝рд╛рдЗрд▓, рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдореВрд▓реНрдпред

рдпрд╣рд╛рдВ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ:

     movie_data = IncludeFile("movie_data",                             help="The path to a movie metadata file.",                             default = 'movies.csv')                               max_genres = Parameter('max_genres',                help="The max number of genres to return statistics for",                default=5) 

Task рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреЛрдВрдбрд╛ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢


  • рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдХреЛрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЛрдВрдбрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдкрд░ рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред
  • GenreStatsFlow рд╡рд░реНрдЧ рдХреЛ Metaflow рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди GenreStatsFlow рдбреЗрдХреЛрд░реЗрдЯрд░ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЕрдЬрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЗрд╕реЗ рдпрд╛ рддреЛ рдХреЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рджрд┐рдЦрд╛рддрд╛ рд╣реИред

     def get_python_version():    """     ,    python,       .         conda        python.    """    import platform    versions = {'2' : '2.7.15',                '3' : '3.7.4'}    return versions[platform.python_version_tuple()[0]] #       python. @conda_base(python=get_python_version()) class GenreStatsFlow(FlowSpec): 
  • рдЕрдм рдЖрдк рдЯрд╛рд╕реНрдХ рдЪреЗрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪрд░рдг рдореЗрдВ @conda рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ libraries рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ, рдХрджрдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХрдВрдЯреЗрдирд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдВрдХреБрд▓ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред

         @conda(libraries={'pandas' : '0.24.2'})    @step    def start(self): 
  • рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: python3 tutorial_flow.py --environment=conda run ред

тЦНStep рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рд░рдВрдн


 @conda(libraries={'pandas' : '0.24.2'})    @step    def start(self):    """         :        1)      Pandas.        2)    .        3)        .    """        import pandas        from io import StringIO        #      Pandas.        self.dataframe = pandas.read_csv(StringIO(self.movie_data))        #   'genres'      .         #   .        self.genres = {genre for genres \                       in self.dataframe['genres'] \                       for genre in genres.split('|')}        self.genres = list(self.genres)        #        .        #  'foreach'             #          self.next(self.compute_statistics, foreach='genres') 

рдЗрд╕ рдХреЛрдб рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

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

_ рдХрдВрдкреНрдпреВрдЯ_рд╕реНрдЯреИрдЯрд┐рд╕реНрдЯрд┐рдХреНрд╕ рдЪрд░рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


 @catch(var='compute_failed')    @retry    @conda(libraries={'pandas' : '0.25.3'})    @step    def compute_statistics(self):        """            .        """        #             # 'input'.        self.genre = self.input        print("Computing statistics for %s" % self.genre)        #         ,         #        .        selector = self.dataframe['genres'].\                   apply(lambda row: self.genre in row)        self.dataframe = self.dataframe[selector]        self.dataframe = self.dataframe[['movie_title', 'genres', 'gross']]        #     gross   .        points = [.25, .5, .75]        self.quartiles = self.dataframe['gross'].quantile(points).values        #  ,    .        self.next(self.join) 

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

ред рдЬреЙрдЗрди рд╕реНрдЯреЗрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ


 @conda(libraries={'pandas' : '0.25.3'})    @step    def join(self, inputs):        """               .        """        inputs = inputs[0:self.max_genres]        #   ,    .        self.genre_stats = {inp.genre.lower(): \                            {'quartiles': inp.quartiles,                             'dataframe': inp.dataframe} \                            for inp in inputs}        self.next(self.end) 

рдпрд╣рд╛рдБ рдпрд╣ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдиреЗ рд▓рд╛рдпрдХ рд╣реИ:

  • рдЗрд╕ рдЪрд░рдг рдореЗрдВ, рд╣рдо рдкрд╛рдВрдбрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • inputs рдРрд░реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд compute_statistics рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИред рдЗрд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд░рди рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡рд┐рднрд┐рдиреНрди рдЪрд░ рдХреЗ рдорд╛рдиред рддреЛ, input[0].quartiles рдореЗрдВ comedy рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП input[0].quartiles рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ input[1].quartiles input[0].quartiles рдореЗрдВ sci-fi рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП input[0].quartiles рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

тЦНрд░реЗрдбреНрдбреА рдХрд╛ рдорд╕реМрджрд╛


рдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╣реИ рд╡рд╣ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреИрд╕реЗ tutorial_flow.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ tutorial_flow.py , рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 python3 tutorial_flow.py --environment=conda show 

рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 python3 tutorial_flow.py --environment=conda run --movie_data=path/to/movies.csv --max_genres=7 

рдХреНрд▓рд╛рдЗрдВрдЯ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛


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

рдпрд╣рд╛рдБ genre_stats рдХреЗ рдЕрдВрддрд┐рдо рд╕рдлрд▓ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЪрд░ genre_stats рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред

 from metaflow import Flow, get_metadata #      print("Using metadata provider: %s" % get_metadata()) #     MovieStatsFlow. run = Flow('GenreStatsFlow').latest_successful_run print("Using analysis from '%s'" % str(run)) genre_stats = run.data.genre_stats print(genre_stats) 

рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдЪрд▓рд╛рдирд╛


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

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


рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдФрд░ AWS рдПрдХреАрдХрд░рдг

рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХреЛ AWS рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдПрдХ рдмрд╛рд░ рдХрд╛ AWS рд╕реЗрдЯрдЕрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ Metaflow рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╣реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╛рд░реНрдп рджрд▓ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рдЙрдбрдлрд╝реЙрд░реНрдореЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред
  • рдЕрдЧрд▓рд╛, рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рдЖрдкрдХреЛ metaflow configure aws рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА metaflow configure aws рдХрд░реЗрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рджрд░реНрдЬ рдХрд░реЗрдВред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде, рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
  • рдЕрдм, рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реНрдЯрд╛рд░реНрдЯ --with batch рд╕рд┐рд░реНрдл --with batch рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: python3 sample_flow.py run --with batch ред
  • рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдХреБрдЫ рдЪрд░рдгреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреБрдЫ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рдЪрд░рдгреЛрдВ рдореЗрдВ @batch рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣: @batch(cpu=1, memory=500) ред

рдкрд░рд┐рдгрд╛рдо


рдпрд╣рд╛рдВ, рдореИрдВ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рджреЛрдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

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


All Articles