рдмрд░реНрдХрд▓реЗ рдореЗрдВ рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП
рд╕реНрдкрд╛рд░реНрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ред рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдкрд░, рдпрд╣ MapReduce рдХреА рдорд╛рдкрдиреАрдпрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, 10-30 рдмрд╛рд░ Hadoop рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ 30x рддрдХ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдЕрдкреАрд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдбреЗрдЯрд╛ рдорд╛рдЗрдирд┐рдВрдЧ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ рдЬреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВред рджрд░рдЕрд╕рд▓, рдЗрди рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рд▓реЗрдХрд┐рди рд╕реНрдкрд╛рд░реНрдХ рди рдХреЗрд╡рд▓ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдмрд▓реНрдХрд┐ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рднреА рд╣реИрдбреЛрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рд╕реНрдкрд╛рд░реНрдХ рдореЗрдВ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░ рдПрдХ рдирдИ рдЕрдореВрд░реНрддрддрд╛ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ, рд░реЗрд╕рд┐рд▓рд┐рдПрдВрдЯ рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ (рдЖрд░рдбреАрдбреА): рдпрд╣ рдХреНрд▓рд╕реНрдЯрд░ рдорд╢реАрдиреЛрдВ рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рд╡реЗ рдбрд┐рд╕реНрдХ рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣рд╛рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд░рдбреАрдбреА рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ 39 рдЬреАрдмреА рддрдХ, 1 рдПрд╕ рд╕реЗ рдХрдо рдХреА рдПрдХреНрд╕реЗрд╕ рдЧрддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╛рд░реНрдХ рдХреЛ рд╕реНрдХреЗрд▓ 2.8.1 рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЖрд░рдбреАрдбреА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдкрд╛рд░реНрдХ рдХреЛ
рдореЗрд╕реЛрд╕ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рддрд╣рдд рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд╛рдбреЛрдк рдпрд╛ рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреБрдЫ
рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ ред
рдкрд╛рда рдЦреЛрдЬval file = spark.textFile( "hdfs://..." )
val errors = file. filter ( line => line.contains("ERROR") )
// Count all the errors
errors. count ()
// Count errors mentioning MySQL
errors. filter ( line => line.contains("MySQL") ). count ()
// Fetch the MySQL errors as an array of strings
errors. filter ( line => line.contains("MySQL") ). collect ()
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд▓реЙрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЦреЛрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд▓рд╛рд▓ рдЯреБрдХрдбрд╝реЗ рд╕реНрдХреИрд▓рд╛ рд▓реВрдкрдмреИрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдиреАрд▓реЗ рд╕реНрдкрд╛рд░реНрдХ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрд╛рда рдЦреЛрдЬреЗрдВрд╕реНрдкрд╛рд░реНрдХ рдЗрди рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди-рдореЗрдореЛрд░реА рдЖрд░рдбреАрдбреА рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреИрд╢ рдХрд░реЗрдЧрд╛ред
errors. cache ()
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдлреА рддреЗрдЬреА рдЖрддреА рд╣реИред
рд╢рдмреНрдж рдЧрдгрдирд╛рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реЗ (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЗрдВрдЯ) рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЪрд░рдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред
val file = spark.textFile( "hdfs://..." )
val counts = file. flatMap ( line => line.split(" ") )
. map ( word => (word, 1) )
. reduceByKey ( _ + _ )
counts. saveAsText ( "hdfs://..." )
рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ рд░рд┐рдЧреНрд░реЗрд╢рдирдпрд╣ рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдореЙрдбрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ рд╡рдХреНрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдлрд┐рдЯрд┐рдВрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкреИрдо рдорд╛рдиреНрдпрддрд╛ рдореЗрдВред рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реИрдо рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
val points = spark.textFile(...). map (parsePoint). cache ()
var w = Vector.random(D) // current separating plane
for (i <- 1 to ITERATIONS) {
val gradient = points. map ( p =>
(1 / (1 + exp(-py*(w dot px))) - 1) * py * px
). reduce ( _ + _ )
w -= gradient
}
println( "Final separating plane: " + w)
рдЖрд░реЗрдЦ 80-рдХреЛрд░ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ 30 рдЬреАрдмреА рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ рд░рд┐рдЧреНрд░реЗрд╢рди рдореЙрдбрд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рд╕реНрдкрд╛рд░реНрдХ рдФрд░ рд╣рдбреЛрдк рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рд╕реНрдкрд╛рд░реНрдХ рдПрдХ рдореБрдХреНрдд рдмреАрдПрд╕рдбреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбрд╛рдЙрдирд▓реЛрдб рдкреГрд╖реНрдардкреНрд░рд▓реЗрдЦрдирдкреНрд░рд╢реНрди:
рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА