рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдПрдХ рдкрд╛рдпрдерди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬреЛ рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдХрдВрдкрдиреА рдиреЗ рдЗрд╕реЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдкрд┐рдЫрд▓реЗ 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. """
рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢
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) . """
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХреЛрдб рдореЗрдВ рдлрд╝реЙрд░реНрдо
# 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
рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдЪрд▓рд╛рдирд╛
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдорд┐рдд рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХреЗрд╡рд▓ 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 рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдврд╛рдВрдЪрд╛рдЧрдд рд╡рд┐рдХрд╛рд╕ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рд╣реИред
- рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИ (рдХрд╛рдо рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреИрд╕реЗ рдПрдпрд░рдлреНрд▓реЛ)ред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?
