рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

PySpark Read CSV: рдмрдбрд╝реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВ

PySpark рдореЗрдВ CSV рдлрд╛рдЗрд▓реЗрдВ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреИрд╕реЗ рдкрдврд╝реЗрдВ рд╕реАрдЦреЗрдВред рд╡рд┐рдХрд▓реНрдкреЛрдВ, рд╕реНрдХреАрдорд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ, рдХрдВрдкреНрд░реЗрд╢рди, рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ, рдФрд░ рдмрд┐рдЧ рдбреЗрдЯрд╛ рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВред
┬╖ 7 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдореЗрдВ CSV рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рдЕрд╣рдо рд╕реНрддрдВрдн рд╣реИрдВред рд▓рдЧрднрдЧ рд╣рд░ рдбреЗрдЯрд╛ рдкреНрд░реЛрдлреЗрд╢рдирд▓тАФрдорд┐рдб-рд▓реЗрд╡рд▓ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдФрд░ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрдЯрд┐рд╕реНрдЯ рд╕реЗ рд▓реЗрдХрд░ PySpark рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░ рддрдХтАФрдХрд┐рд╕реА рди рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ CSV рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ, рдФрд░ рдлрд┐рд░ рдЯреЗрд░рд╛рдмрд╛рдЗрдЯ рдпрд╛ рдЙрд╕рд╕реЗ рднреА рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, Pandas рдпрд╛ рдорд╛рдирдХ Python рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреИрд╕реЗ рд╕рд░рд▓, рдПрдХрд▓ рдЯреВрд▓ рдЗрд╕ рд▓реЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдВрдШрд░реНрд╖ рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдпрд╣реАрдВ рдкрд░ Apache Spark рдФрд░ PySpark рд╡рд┐рддрд░рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдХреА CSV рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ PySpark рдХреЗ рд╕рд╛рде рдмрдбрд╝реА CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬрд╛рдирдХрд╛рд░рд┐рдпрд╛рдБ рд╕рд┐рдЦрд╛рдПрдЧрд╛ред┬а

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ PySpark рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд░рдЦрд╛ рд╣реИ рдФрд░ рдЖрдк рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВтАФрдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ Getting Started with PySpark рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВред┬а

PySpark рдореЗрдВ CSV рдкрдврд╝рдирд╛ рдХреНрдпрд╛ рд╣реИ?

PySpark рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ CSV рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд DataFrames рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИред PySpark рдореЗрдВ DataFrames, Pandas DataFrames рд╕реЗ рдХрд╛рдлреА рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдВрддрд░рд┐рдХ рд╕реНрддрд░ рдкрд░, PySpark DataFrames рдЧрдгрдирд╛ рдФрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдХрдИ рдиреЛрдбреНрд╕ рдореЗрдВ рдмрд╛рдБрдЯ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░реАрди рдкреНрд░рджрд░реНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИред┬а

рдмрдбрд╝реА CSV рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП PySpark рдХрдИ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд▓рд╛рдн рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

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

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

PySpark рдореЗрдВ CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рдирд╛ рдЙрди рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдордЭрдирд╛ PySpark рдЗрдВрдЯрд░рд╡реНрдпреВ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рд╣реИред рд╣рдорд╛рд░рд╛ 2025 рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ 36 PySpark рдЗрдВрдЯрд░рд╡реНрдпреВ рдкреНрд░рд╢реНрди рдФрд░ рдЙрддреНрддрд░ рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рд▓реЗрдХрд░ рдЙрдиреНрдирдд рддрдХрдиреАрдХреЛрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рди рд░рдгрдиреАрддрд┐рдпреЛрдВ рддрдХ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджреЗрддрд╛ рд╣реИред┬а┬а

PySpark рдореЗрдВ CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

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

рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рдврд╛рдВрдЪрд╛

PySpark, Spark рдХреЗ рд╡рд┐рддрд░рд┐рдд рдореЙрдбрд▓ рдХреЗ рднреАрддрд░ CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рддрд╛ рд╣реИред рдХрд┐рд╕реА рдПрдХ рдорд╢реАрди рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рдкреВрд░рд╛ CSV рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, Spark рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдХрдИ рдиреЛрдбреНрд╕ рдореЗрдВ рдмрд╛рдБрдЯ рджреЗрддрд╛ рд╣реИред Spark рдХрд╛ рдмрд┐рд▓реНрдЯ-рдЗрди Catalyst optimizer CSV рдЗрдиреНрдЧреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдФрд░ рдмреЗрд╣рддрд░ рдХрд░рддрд╛ рд╣реИред

рдореБрдЦреНрдп рд░реАрдб рд╕рд┐рдВрдЯреИрдХреНрд╕

CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рд░рд▓ рддрд░реАрдХрд╛ Spark рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:┬а

spark.read.csv("file_path", header=True, inferSchema=True)

рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ:

spark.read.format("csv").option("header", "True").load("file_path")

рдореБрдЦреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • file_path - CSV рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд▓реЛрдХреЗрд╢рдиред
  • header - рдпрджрд┐ True рд╣реИ рддреЛ CSV рд╣реЗрдбрд░ рд╕реЗ рдХреЙрд▓рдо рдирд╛рдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
  • inferSchema - рдХреЙрд▓рдо рдХреЗ рдбреЗрдЯрд╛ рдЯрд╛рдЗрдкреНрд╕ рдХреЛ рд╕реНрд╡рддрдГ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рддрд╛ рд╣реИред
  • delimiter - рдХреЙрд▓рдо рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреИрд░реЗрдХреНрдЯрд░; рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдорд╛ рд╣реИред

рд╣рдорд╛рд░рд╛ Learn PySpark From Scratch in 2025 рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ PySpark рдХреА рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реАрдЦреЗрдВ, рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИред┬а

CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рдирд╛: рд╡рд┐рдХрд▓реНрдк рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

PySpark рд╡реНрдпрд╛рдкрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ CSV рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╕реВрдХреНрд╖реНрдо рдирд┐рдпрдВрддреНрд░рдг рджреЗрддреЗ рд╣реИрдВред

рд╣реЗрдбрд░ рдФрд░ рд╕реНрдХреАрдорд╛ рдЗрдиреНрдлрд╝рд░реЗрдВрд╕

header=True рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ Spark рдкрд╣рд▓реА CSV рд▓рд╛рдЗрди рдХреЛ рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

inferSchema=True┬а Spark рдХреЛ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рд╕реНрдХреИрди рдХрд░рдХреЗ рдХреЙрд▓рдо рдЯрд╛рдЗрдкреНрд╕ рдХрд╛ рд╕реНрд╡рддрдГ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рджреЗрддрд╛ рд╣реИ:

spark.read.csv("customers.csv", header=True, inferSchema=True)

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

рдХрд╕реНрдЯрдо рд╕реНрдХреАрдорд╛ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди┬а

рдЕрдкрдирд╛ рд╕реНрдХреАрдорд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛, Spark рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдбреЗрдЯрд╛ рд╕реНрдХреИрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдХреАрдорд╛, рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдФрд░ рдЯрд╛рдЗрдкреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ PySpark рдореЗрдВ рдХрд╕реНрдЯрдо рд╕реНрдХреАрдорд╛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

from pyspark.sql.types import StructType, StructField, StringType, IntegerType, DoubleType
schema = StructType([
    StructField("user_id", IntegerType(), True),
    StructField("name", StringType(), True),
    StructField("score", DoubleType(), True),
])
df = spark.read.csv("customers.csv", schema=schema, header=True)

рдЕрдм, CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рддреЗ рд╕рдордп PySpark рдореЗрдВ рдбрд┐рд▓реАрдореАрдЯрд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред┬а

рдбрд┐рд▓реАрдореАрдЯрд░ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдХреИрд░реЗрдХреНрдЯрд░реНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛

рдХрдИ CSV рдлрд╛рдЗрд▓реЗрдВ рдХреЙрдорд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкрд╛рдЗрдк рдпрд╛ рдЯреИрдм рдЬреИрд╕реЗ рдбрд┐рд▓реАрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред PySpark рдЖрдкрдХреЛ рдбрд┐рд▓реАрдореАрдЯрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ:

spark.read.csv("customers.csv", header=True, delimiter="|")

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╡рд┐рд╢реЗрд╖ рдХреИрд░реЗрдХреНрдЯрд░ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП escape рдФрд░ quote рдХреИрд░реЗрдХреНрдЯрд░ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

spark.read.csv("data.csv", header=True, escape='\"', quote='"')

null рдФрд░ рдорд┐рд╕рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ CSV рдбреЗрдЯрд╛ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЕрд╕рдВрдЧрддрд┐рдпрд╛рдБ рдпрд╛ рдЕрдзреВрд░реЗ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВред PySpark рдХрд╕реНрдЯрдо рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЛ null рдорд╛рдиреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдХреЗ null рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИ:

spark.read.csv("customers.csv", header=True, schema=schema, nullValue="NA")

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

рдЖрдЗрдП null рдорд╛рдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЕрдиреНрдп рд░рдгрдиреАрддрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВред┬а

рдЖрдк null рдорд╛рдиреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:┬а

# Filter rows where Age is not null
df_filtered = df.filter(df["Age"].isNotNull())
df_filtered.show()

рдпрд╣ DataFrame рдХреЛ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ Age рдХреЙрд▓рдо null рдирд╣реАрдВ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

+---+-----+---+------+
| ID| Name|Age|Salary|
+---+-----+---+------+
|  1| John| 25| 50000|
|  3|  Bob| 30|  NULL|
|  4|Carol| 28| 55000|
+---+-----+---+------+

рджреВрд╕рд░реА рд░рдгрдиреАрддрд┐ null рдорд╛рдиреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреА рд╣реИ:┬а

# Replace null values in Age and Salary with default values
df_filled = df.na.fill({"Age": 0, "Salary": 0})
df_filled.show()

рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:┬а

+---+-----+---+------+
| ID| Name|Age|Salary|
+---+-----+---+------+
|  1| John| 25| 50000|
|  2|Alice|  0| 60000|
|  3|  Bob| 30|     0|
|  4|Carol| 28| 55000|
|  5|David|  0| 48000|
+---+-----+---+------+

рдПрдХрд╛рдзрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдкрдврд╝рдирд╛

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

spark.read.csv("/data/sales/*.csv", header=True, schema=schema)

рдпрд╣ рдПрдХ рд╣реА рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдСрдкрд░реЗрд╢рди рдореЗрдВ рдХрдИ CSV рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдПрдХ DataFrame рдореЗрдВ рдПрдХрддреНрд░ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЬрдм рдбреЗрдЯрд╛ PySpark рдореЗрдВ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд░реИрдВрдЧрд▓рд┐рдВрдЧ, рдлреАрдЪрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдФрд░ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ Feature Engineering with PySpark рдХреЛрд░реНрд╕ рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред┬а

рдХреБрд╢рд▓ CSV рд░реАрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЗрдВ

рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдХреЗ CSV рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╕рдордп, PySpark рдХреА рдЕрдиреБрдХреВрд▓рди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ рд░рдгрдиреАрддрд┐рдпрд╛рдБ

рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ, рдбреЗрдЯрд╛ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЧрд╣рд░рд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреА рд╣реИред Spark, рдбреЗрдЯрд╛ рдЗрдиреНрдЧреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкрд╛рд░реНрдЯрд┐рд╢рди рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдмрд╛рдж рдХреЗ рдСрдкрд░реЗрд╢рдВрд╕ рддреЗрдЬрд╝ рд╣реЛ рдкрд╛рддреЗ рд╣реИрдВ:

df = spark.read.csv("data.csv", header=True, schema=schema).repartition(20)

тАЛтАЛ.repartition(20) рдЖрдкрдХреЗ Spark рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ DataFrame рдХреЛ 20 рдкрд╛рд░реНрдЯрд┐рд╢рдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ Spark рдбреЗрдЯрд╛ рдХреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рдкрд╛рд░реНрдЯрд┐рд╢рди рд╣реЛрдиреЗ рд╕реЗ рдпреЗ рд▓рд╛рдн рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • рд╕рдорд╛рдирд╛рдВрддрд░рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░
  • рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╡рд░реНрдХрд▓реЛрдб рдХрд╛ рд╕рдВрддреБрд▓рди
  • рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдФрд░ рд░рд╛рдЗрдЯреНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛

рдпрджрд┐ рдЖрдк рдХрдИ рдХреЛрд░ рд╡рд╛рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрдирдХрд╛ рдкреВрд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЬрд╝рд░реВрд░рдд рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдХрд░ рджреЗрдВ (рдЬреИрд╕реЗ, рдЫреЛрдЯреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ 1000 рдкрд╛рд░реНрдЯрд┐рд╢рди), рддреЛ рдпрд╣ рдзреАрдорд╛ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ PySpark Cheat Sheet: Spark in Python рдХреЗ рд╕рд╛рде repartition рдЬреИрд╕реА рдФрд░ Spark рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдЦреЛрдЬреЗрдВред рдЗрд╕рдореЗрдВ Python рдореЗрдВ Spark рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛, рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛, рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдФрд░ рд░реАрдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред┬а

рдХреИрд╢рд┐рдВрдЧ рдФрд░ рдкрд░рд╕рд┐рд╕реНрдЯреЗрдВрд╕

рдпрджрд┐ рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЗрдиреНрдЧреЗрд╢рди рдХреЗ рдмрд╛рдж рдПрдХ рд╣реА рдбреЗрдЯрд╛рд╕реЗрдЯ рддрдХ рдмрд╛рд░-рдмрд╛рд░ рдкрд╣реБрдБрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдЕрдкрдиреЗ DataFrame рдХреЛ рдореЗрдореЛрд░реА рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдХреИрд╢ рдХрд░рдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ:

df.cache()

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рдЪрд╛рд╣рд┐рдП; рд╣рдореЗрд╢рд╛ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдмрдирд╛рдП рд░рдЦреЗрдВред

рд▓реЗрдЬрд╝реА рдЗрд╡реИрд▓реНрдпреВрдПрд╢рди рдФрд░ рдПрдХреНрд╢рдиреНрд╕ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛

PySpark рд▓реЗрдЬрд╝реА рдЗрд╡реИрд▓реНрдпреВрдПрд╢рди рдореЙрдбрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: DataFrame рдСрдкрд░реЗрд╢рдВрд╕ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд▓рд╛рдиреНрд╕ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╛рдЗрд▓ рдкрдврд╝рдирд╛ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрд╕рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝рддреА рд╣реИтАФрдЬреИрд╕реЗ show(), count(), рдпрд╛ collect() рдЬреИрд╕реЗ рдХрдорд╛рдВрдб рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдкрд░:

# no reading yet
df = spark.read.csv("data.csv", header=True, schema=schema)   
# actual read triggered here
df.show(5)  

рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдФрд░ рд╡рд┐рдЪрд╛рд░

рдЖрдЗрдП рдХреБрдЫ рдЬрдЯрд┐рд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ рдЬрд┐рдирдХрд╛ рд╕рд╛рдордирд╛ рдЖрдкрдХреЛ CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рддреЗ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:┬а

рдХрдВрдкреНрд░реЗрд╕реНрдб CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рдирд╛

Spark, gz рдпрд╛ .bz2 рдЬреИрд╕реА рдХрдВрдкреНрд░реЗрд╕реНрдб CSV рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореИрдиреЗрдЬ рдХрд░рддрд╛ рд╣реИ:

spark.read.csv("logs.csv.gz", header=True, schema=schema)

рдЦрд░рд╛рдм рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛

CSV рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ рдореЗрдВ рдЦрд░рд╛рдм рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред PySpark рддреНрд░реБрдЯрд┐рдпреЛрдВ рдпрд╛ рдЦрд░рд╛рдм рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╕рд╣рдЬрддрд╛ рд╕реЗ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ:

  • mode="PERMISSIVE" (рдбрд┐рдлрд╝реЙрд▓реНрдЯ): рдЦрд░рд╛рдм рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ null-рднрд░реЗ рдХреЙрд▓рдореНрд╕ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред
  • mode="DROPMALFORMED: рдЦрд░рд╛рдм рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рдЪреБрдкрдЪрд╛рдк рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдореЛрдб CSV рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдореЗрдВ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИред
  • mode="FAILFAST": рдХрд┐рд╕реА рднреА рдЦрд░рд╛рдм рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдорд┐рд▓рдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред
spark.read.csv("data.csv", header=True, schema=schema, mode="FAILFAST")

рд▓реЛрдХреЗрд▓ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕

рдХрднреА-рдХрднреА CSV рдбреЗрдЯрд╛ рдЧреИрд░-рдорд╛рдирдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред PySpark, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ:

spark.read.csv("data_utf8.csv", header=True, encoding="UTF-8")

рд╕рдорд░реНрдерд┐рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, рдФрд░ UTF-16.┬а

рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ рдФрд░ рдЖрдо рдЧрд▓рддрд┐рдпрд╛рдБ

Spark рдХреЗ рд╕рд╛рде CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рддреЗ рд╕рдордп рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рдХреБрдЫ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ:

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

рдЗрдирд╕реЗ рдмрдЪреЗрдВ:┬а

  • рд╣реЗрдбрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ CSVs рдХреЗ рд▓рд┐рдП header=False рд╕реЗрдЯ рдХрд░рдирд╛ред
  • рдмрдбрд╝реЗ рдпрд╛ рдмрд╛рд░-рдмрд╛рд░ рдПрдХреНрд╕реЗрд╕ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ рдореЗрдВ рд╕рд┐рд░реНрдл inferSchema рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ред
  • рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбрд┐рд▓реАрдореАрдЯрд░ рдпрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рдирд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

PySpark рдХреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА CSV рдЗрдиреНрдЧреЗрд╢рди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдкреНрд░рднрд╛рд╡реА рдмрд┐рдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд╕реНрдХреАрдорд╛ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди, рдХрд╕реНрдЯрдо null рдлрд╝реЙрд░реНрдореИрдЯреНрд╕ рдХрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ, рдХреБрд╢рд▓ рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдФрд░ рдХрдВрдкреНрд░реЗрд╕реНрдб рдпрд╛ рдорд▓реНрдЯреА-рдлрд╛рдЗрд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрдитАФрдЗрди рд╕рдмрдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕рд░рд▓ рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рд╡рд╛рд▓рд╛ рдмрдирддрд╛ рд╣реИред

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

PySpark рдХреЛ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддреГрдд Spark рдХреЛрд░реНрд╕реЗрдЬ рджреЗрдЦреЗрдВ, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

PySpark Read CSV FAQs

PySpark рдореЗрдВ рдмрдбрд╝реА CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?

рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛ рдпрд╣ рд╣реИ рдХрд┐ inferSchema рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп StructType рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╕реНрдЯрдо рд╕реНрдХреАрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдпрд╣ рддрд░реАрдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдбреЗрдЯрд╛ рд╕реНрдХреИрди рд╕реЗ рдмрдЪрд╛рдХрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ PySpark рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рд▓реАрдореАрдЯрд░ рд╡рд╛рд▓реА CSV рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдБред рдЖрдк spark.read.csv() рдореЗрдВ delimiter рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╕реНрдЯрдо рдбрд┐рд▓реАрдореАрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдЗрдк-рд╕реЗрдкрд░реЗрдЯреЗрдб рд╡реИрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП delimiter="|" рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореИрдВ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдореМрдЬреВрдж рдХрдИ CSV рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдкрдврд╝реВрдБ?

рдЖрдк рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкрд╛рде, рдЬреИрд╕реЗ spark.read.csv("/data/*.csv", ...), рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рде рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╣реА DataFrame рдореЗрдВ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

CSVs рдкрдврд╝рддреЗ рд╕рдордп `mode="DROPMALFORMED"` рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

рдпрд╣ Spark рдХреЛ CSV рдлрд╛рдЗрд▓ рдореЗрдВ рдореМрдЬреВрдж рдЦрд░рд╛рдм рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдпрд╛ рдлреЗрд▓рд┐рдпрд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрдиреЗ рдФрд░ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред

рдХреНрдпрд╛ PySpark `.gz` рдпрд╛ `.bz2` рдЬреИрд╕реА рдХрдВрдкреНрд░реЗрд╕реНрдб CSV рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдБред рдЬрдм рдЖрдк рд╕рд╣реА рдлрд╛рдЗрд▓ рдкрд╛рде рджреЗрддреЗ рд╣реИрдВ, рддреЛ PySpark рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдХрдВрдкреНрд░реЗрд╕реНрдб CSV рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрд╡рддрдГ рдбреА-рдХрдВрдкреНрд░реЗрд╕ рдХрд░рдХреЗ рдкрдврд╝ рд▓реЗрддрд╛ рд╣реИред

Derrick Mwiti

рд▓реЗрдЦрдХ

Derrick Mwiti

рд╡рд┐рд╖рдп