рдЕрднреНрдпрд╛рд╕рдорд╛ рд╕реНрдкрд╛рд░реНрдХ рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕

рдкреНрд░рд┐рдп рдкрд╛рдардХрд╣рд░реВ, рд╢реБрдн рджрд┐рдЙрдБрд╕реЛ!

рдпрд╕ рд▓реЗрдЦрдорд╛, Neoflex рдХреЛ рдмрд┐рдЧ рдбрд╛рдЯрд╛ рд╕рдорд╛рдзрд╛рди рд╡реНрдпрд╡рд╕рд╛рдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрдЧреНрд░рдгреА рд╕рд▓реНрд▓рд╛рд╣рдХрд╛рд░ Apache Spark рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЪрд░ рд╕рдВрд░рдЪрдирд╛ рд╢реЛрдХреЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рд╛рдЧреА рд╡рд┐рдХрд▓реНрдкрд╣рд░реБ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред

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

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

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд▓рдХреНрд╖рд┐рдд рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯрдХреЛ рдпреЛрдЬрдирд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд╛рд╣рд╛ рдЫреИрдиред рдпрд╕рдмрд╛рд╣реЗрдХ, рдпреЛрдЬрдирд╛ рдкрдирд┐ рдЕрдЧреНрд░рд┐рдо рд░реВрдкрдорд╛ рдХреЛрд░реНрди рд╕рдХрд┐рдБрджреИрди, рдХрд┐рдирдХрд┐ рдпреЛ рдбрд╛рдЯрд╛рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рд░ рд╣рд╛рдореА рдпреА рдзреЗрд░реИ рдврд┐рд▓реЛ рд╕рдВрд░рдЪрд┐рдд рдбрд╛рдЯрд╛рд╕рдБрдЧ рдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдЖрдЬ рдирд┐рдореНрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓рдЧ рдЫ:

{source: "app1", error_code: ""}

рд░ рднреЛрд▓рд┐ рддреНрдпрд╣реА рдкреНрд░рдгрд╛рд▓реАрдмрд╛рдЯ рдирд┐рдореНрди рдЬрд╡рд╛рдл рдЖрдЙрдБрдЫ:

{source: "app1", error_code: "error", description: "Network error"}

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

рдпрд╕реНрддреЛ рдбрд╛рдЯрд╛рдорд╛ рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдп рд░рд╛рдореНрд░реЛ рдорд╛рдирдХ рд╣реЛ, рд░ рд╕реНрдкрд╛рд░реНрдХрд╕рдБрдЧ рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдЙрдкрдХрд░рдгрд╣рд░реВ рдЫрдиреНред рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА, JSON рд░ XML рджреБрдмреИ рдХреЛ рд▓рд╛рдЧреА рд╕рдорд░реНрдерди рдЫ, рд░ рдкрд╣рд┐рд▓реЗ рдЕрдЬреНрдЮрд╛рдд рд╕реНрдХреАрдорд╛ рдХреЛ рд▓рд╛рдЧреА, schemaEvolution рдХреЛ рд▓рд╛рдЧреА рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред

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

рд╕рдмреИ рдХреБрд░рд╛ рд╕рд░рд▓ рджреЗрдЦрд┐рдиреНрдЫред

рдпрджреНрдпрдкрд┐, рдпреЛ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдЫреЛрдЯреЛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдмрд╛рдЯ рд╕реНрдкрд╖реНрдЯ рдЫреИрди рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдзреЗрд░реИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рдХреЗ рдЧрд░реНрдиреЗред

рдХрд╛рдЧрдЬрд╛рддрд▓реЗ рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╣реЛрдЗрди, рддрд░ рдбрд╛рдЯрд╛рдлреНрд░реЗрдордорд╛ JSON рд╡рд╛ XML рдкрдвреНрдирдХреЛ рд▓рд╛рдЧрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред

рдЕрд░реНрдерд╛рддреН, рдпрд╕рд▓реЗ JSON рдХрд╕рд░реА рдкрдвреНрдиреЗ рд░ рдкрд╛рд░реНрд╕ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫ:

df = spark.read.json(path...)

рдпреЛ Spark рдорд╛ рдбрд╛рдЯрд╛ рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрди рдкрд░реНрдпрд╛рдкреНрдд рдЫред

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

рд╢реЛрдХреЗрд╕ рдирд┐рд░реНрдорд╛рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЫ:

1 рдХрджрдоред рдбреЗрдЯрд╛ рдкрдЫрд┐рдХреЛ рджреИрдирд┐рдХ рдкреБрди: рд▓реЛрдбрдХреЛ рд╕рд╛рде Hadoop рдорд╛ рд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдирдпрд╛рдБ рд╡рд┐рднрд╛рдЬрдирдорд╛ рдердкрд┐рдПрдХреЛ рдЫред рдпреЛ рджрд┐рди рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрдЧ рдПрдХ рдлреЛрд▓реНрдбрд░ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫред

2 рдХрджрдоред рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд▓реЛрдбрд┐рдЩрдХреЛ рд╕рдордпрдорд╛, рдпреЛ рдлреЛрд▓реНрдбрд░ рд╕реНрдкрд╛рд░реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрдврд┐рдиреНрдЫ рд░ рдкрд╛рд░реНрд╕ рдЧрд░рд┐рдиреНрдЫред рдирддрд┐рдЬрд╛ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдПрдХ рдврд╛рдБрдЪрд╛рдорд╛ рдмрдЪрдд рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬреБрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкрд╛рд░реНрдХреЗрдЯрдорд╛, рдЬреБрди рддреНрдпрд╕рдкрдЫрд┐ рдЗрдореНрдкрд╛рд▓рд╛рдорд╛ рдЖрдпрд╛рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрд╕рд▓реЗ рдпрд╕ рдмрд┐рдиреНрджреБ рд╕рдореНрдо рдЬрдореНрдорд╛ рднрдПрдХрд╛ рд╕рдмреИ рдбрд╛рдЯрд╛рдХреЛ рд╕рд╛рде рдПрдХ рд▓рдХреНрд╖реНрдп рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫред

3 рдХрджрдоред рдПрдЙрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬрд╕рд▓реЗ рд╣рд░реЗрдХ рджрд┐рди рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯ рдЕрдкрдбреЗрдЯ рдЧрд░реНрдиреЗрдЫред
рддреНрдпрд╣рд╛рдБ рдмрдвреНрджреЛ рд▓реЛрдбрд┐рдЩрдХреЛ рдкреНрд░рд╢реНрди рдЫ, рд╢реЛрдХреЗрд╕ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд░ рд╢реЛрдХреЗрд╕рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдХрд╛рдпрдо рд░рд╛рдЦреНрдиреЗ рдкреНрд░рд╢реНрди рдЫред

рдПрдЙрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдФрдВред рдорд╛рдиреМрдВ рдХрд┐ рднрдгреНрдбрд╛рд░ рдирд┐рд░реНрдорд╛рдгрдХреЛ рдкрд╣рд┐рд▓реЛ рдЪрд░рдг рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ JSON рдлрд╛рдЗрд▓рд╣рд░реВ рдлреЛрд▓реНрдбрд░рдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред

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

df = spark.read.option("mergeSchema", True).json(".../*") 
df.printSchema()

root 
|-- a: long (nullable = true) 
|-- b: string (nullable = true) 
|-- c: struct (nullable = true) |    
|-- d: long (nullable = true)

рд╕рдмреИ рдард┐рдХрдард╛рдХ рдЫ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрдЫред

рд╣рд╛рдореАрд▓реЗ JSON рдкрдвреНрдЫреМрдВ рд░ рдкрд╛рд░реНрд╕ рдЧрд░реНрдЫреМрдВ, рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдбреЗрдЯрд╛рдлреНрд░реЗрдорд▓рд╛рдИ рдкрд░реНрдХреЗрдЯрдХреЛ рд░реВрдкрдорд╛ рдмрдЪрдд рдЧрд░реНрдЫреМрдВ, рдпрд╕рд▓рд╛рдИ Hive рдорд╛ рдХреБрдиреИ рдкрдирд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░рд┐рдХрд╛рдорд╛ рджрд░реНрддрд╛ рдЧрд░реЗрд░:

df.write.format(тАЬparquetтАЭ).option('path','<External Table Path>').saveAsTable('<Table Name>')

рд╣рд╛рдореАрд▓реЗ рд╢реЛрдХреЗрд╕ рдкрд╛рдЙрдБрдЫреМрдВред

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

рддрд╛рд░реНрдХрд┐рдХ рд╕рдорд╛рдзрд╛рди рднрдиреЗрдХреЛ рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯрд▓рд╛рдИ рджрд┐рдирдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреБ рд╣реЛ, рдЬрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрд░реНрдХреЛ рджрд┐рди рдирдпрд╛рдБ рд╡рд┐рднрд╛рдЬрди рдердкреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдВрдпрдиреНрддреНрд░ рдкрдирд┐ рд░рд╛рдореНрд░рд░реА рдЬреНрдЮрд╛рдд рдЫ, рд╕реНрдкрд╛рд░реНрдХрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ рдЫреБрдЯреНрдЯреИ рд▓реЗрдЦреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

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

df.write.partitionBy("date_load").mode("overwrite").parquet(dbpath + "/" + db + "/" + destTable)

рдЕрд░реНрдХреЛ рджрд┐рди, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдирдпрд╛рдБ рд╡рд┐рднрд╛рдЬрди рд▓реЛрдб рдЧрд░реНрдЫреМрдВ:

df.coalesce(1).write.mode("overwrite").parquet(dbpath + "/" + db + "/" + destTable +"/date_load=" + date_load + "/")

рд╕реНрдХрд┐рдорд╛ рдЕрдкрдбреЗрдЯ рдЧрд░реНрди Hive рдорд╛ рдкреБрди: рджрд░реНрддрд╛ рдЧрд░реНрди рдмрд╛рдБрдХреА рд░рд╣реЗрдХреЛ рдЫред
рддрд░, рд╕рдорд╕реНрдпрд╛ рдпрд╣реАрдБ рдЫ ред

рдкрд╣рд┐рд▓реЛ рд╕рдорд╕реНрдпрд╛ред рдврд┐рд▓реЛ рд╡рд╛ рдкрдЫрд┐, рдирддрд┐рдЬрд╛ рдкрд░реНрдХреЗрдЯ рдЕрдкрдардиреАрдп рд╣реБрдиреЗрдЫред рдпреЛ рдХрд╕рд░реА parquet рд░ JSON рдЦрд╛рд▓реА рдХреНрд╖реЗрддреНрд░рд╣рд░реВрд▓рд╛рдИ рдлрд░рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗ рдХрд╛рд░рдгрд▓реЗ рд╣реЛред

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд╕реНрдерд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реМрдВред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд┐рдЬреЛ JSON рдЖрдЗрдкреБрдЧреНрдпреЛ:

╨Ф╨╡╨╜╤М 1: {"a": {"b": 1}},

рд░ рдЖрдЬ рдЙрд╣реА JSON рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

╨Ф╨╡╨╜╤М 2: {"a": null}

рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ рджреБрдИ рдлрд░рдХ рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ рдЫрдиреН, рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд▓рд╛рдЗрдирдХреЛ рд╕рд╛рдеред
рдЬрдм рд╣рд╛рдореАрд▓реЗ рд╕рдореНрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдкрдвреНрдЫреМрдВ, рд╕реНрдкрд╛рд░реНрдХрд▓реЗ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫ, рд░ "a" рдкреНрд░рдХрд╛рд░рдХреЛ "рд╕рдВрд░рдЪрдирд╛" рдХреЛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛ, INT рдХреЛ рдиреЗрд╕реНрдЯреЗрдб рдлрд┐рд▓реНрдб "b" рдХреЛ рд╕рд╛рде рдмреБрдЭреНрдиреЗрдЫред рддрд░, рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЬрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдЪрдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдЕрд╕рдВрдЧрдд рд╡рд┐рднрд╛рдЬрди рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рдПрдХ рдЫрддреНрддреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ:

df1 (a: <struct<"b": INT>>)
df2 (a: STRING NULLABLE)

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

df = spark.read.json("...", dropFieldIfAllNull=True)

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкрд░реНрдХреЗрдЯрд▓реЗ рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рдЬреБрди рд╕рдБрдЧреИ рдкрдвреНрди рд╕рдХрд┐рдиреНрдЫред
рдпрджреНрдпрдкрд┐ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдпреЛ рдЧрд░реНрдиреЗрд╣рд░реВ рдпрд╣рд╛рдБ рдореБрд╕реНрдХреБрд░рд╛рдЙрдиреЗрдЫрдиреНред рдХрд┐рди? рд╣реЛ, рдХрд┐рдирднрдиреЗ рддреНрдпрд╣рд╛рдБ рджреБрдИ рдердк рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдЫред рд╡рд╛ рддреАрдиред рд╡рд╛ рдЪрд╛рд░ред рдкрд╣рд┐рд▓реЛ, рдЬреБрди рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫ, рдпреЛ рд╣реЛ рдХрд┐ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рд╡рд┐рднрд┐рдиреНрди JSON рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдлрд░рдХ рджреЗрдЦрд┐рдиреЗрдЫрдиреНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, {intField: 1} рд░ {intField: 1.1}ред рдпрджрд┐ рддреНрдпрд╕реНрддрд╛ рдлрд╛рдБрдЯрд╣рд░реВ рдПрдЙрдЯреИ рд╡рд┐рднрд╛рдЬрдирдорд╛ рдлреЗрд▓рд╛ рдкрд░реНрдЫрдиреН рднрдиреЗ, рд╕реНрдХрд┐рдорд╛ рдорд░реНрдЬрд▓реЗ рд╕рдмреИ рдХреБрд░рд╛ рд╕рд╣реА рд░реВрдкрдорд╛ рдкрдвреНрдиреЗрдЫ, рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╣реА рдкреНрд░рдХрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдЧреНрд░рдгреАред рддрд░ рдпрджрд┐ рдлрд░рдХрдорд╛, рддрдм рдПрдЙрдЯрд╛рд╕рдБрдЧ intField: int рд╣реБрдиреЗрдЫ, рд░ рдЕрд░реНрдХреЛрд╕рдБрдЧ intField: рдбрдмрд▓ рд╣реБрдиреЗрдЫред

рдпреЛ рд╕реНрдерд┐рддрд┐ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рдирд┐рдореНрди рдЭрдгреНрдбрд╛ рдЫ:

df = spark.read.json("...", dropFieldIfAllNull=True, primitivesAsString=True)

рдЕрдм рд╣рд╛рдореАрд╕рдБрдЧ рдПрдЙрдЯрд╛ рдлреЛрд▓реНрдбрд░ рдЫ рдЬрд╣рд╛рдБ рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ рдЫрдиреН рдЬреБрди рдПрдХрд▓ рдбрд╛рдЯрд╛рдлреНрд░реЗрдордорд╛ рдкрдвреНрди рд╕рдХрд┐рдиреНрдЫ рд░ рд╕рдореНрдкреВрд░реНрдг рд╢реЛрдХреЗрд╕рдХреЛ рдорд╛рдиреНрдп рдкрд░реНрдХреЗрдЯред рд╣реЛ? рдЫреИрдиред

рд╣рд╛рдореАрд▓реЗ рдпрд╛рдж рдЧрд░реНрдиреБрдкрд░реНрдЫ рдХрд┐ рд╣рд╛рдореАрд▓реЗ Hive рдорд╛ рддрд╛рд▓рд┐рдХрд╛ рджрд░реНрддрд╛ рдЧрд░реНрдпреМрдВред рдлрд┐рд▓реНрдб рдирд╛рдорд╣рд░реВрдорд╛ Hive рдХреЗрд╕ рд╕реЗрдиреНрд╕реЗрдЯрд┐рдн рд╣реБрдБрджреИрди, рдЬрдмрдХрд┐ рдкрд░реНрдХреЗрдЯ рдХреЗрд╕ рд╕реЗрдиреНрд╕реЗрдЯрд┐рдн рд╣реБрдиреНрдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рд╕реНрдХреАрдорд╛: рдлрд┐рд▓реНрдб рез: рдЗрдиреНрдЯ, рд░ рдлрд┐рд▓реНрдб рез: рдЗрдиреНрдЯрдХреЛ рд╕рд╛рде рд╡рд┐рднрд╛рдЬрдирд╣рд░реВ Hive рдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рди рдЫрдиреН, рддрд░ рд╕реНрдкрд╛рд░реНрдХрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛрдЗрдиред рдХреНрд╖реЗрддреНрд░рдХреЛ рдирд╛рдорд▓рд╛рдИ рд╕рд╛рдиреЛ рдЕрдХреНрд╖рд░рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реНред

рддреНрдпрд╕ рдкрдЫрд┐, рд╕рдмреИ рдареАрдХ рдЫ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрдЫред

рдпрджреНрдпрдкрд┐, рд╕рдмреИ рдпрддрд┐ рд╕рд░рд▓ рдЫреИрдиред рддреНрдпрд╣рд╛рдБ рджреЛрд╕реНрд░реЛ, рдкрдирд┐ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рдЫред рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд╡рд┐рднрд╛рдЬрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдЪрдд рднрдПрдХреЛрд▓реЗ, рд╡рд┐рднрд╛рдЬрди рдлреЛрд▓реНрдбрд░рдорд╛ рд╕реНрдкрд╛рд░реНрдХ рд╕реЗрд╡рд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, _SUCCESS рд╕рдЮреНрдЪрд╛рд▓рди рд╕рдлрд▓рддрд╛ рдЭрдгреНрдбрд╛ред рдпрд╕рд▓реЗ рдкрд╛рд░реНрдХреЗрдЯ рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрд╛ рддреНрд░реБрдЯрд┐рдХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реБрдиреЗрдЫред рдпрд╕рдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрдкрд╛рд░реНрдХрд▓рд╛рдИ рдлреЛрд▓реНрдбрд░рдорд╛ рд╕реЗрд╡рд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдердкреНрдирдмрд╛рдЯ рд░реЛрдХреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

hadoopConf = sc._jsc.hadoopConfiguration()
hadoopConf.set("parquet.enable.summary-metadata", "false")
hadoopConf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

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

рддрд░, рд╣рд╛рдореАрд╕рдБрдЧ рддреЗрд╕реНрд░реЛ рд╕рдорд╕реНрдпрд╛ рдЫ ред рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдХреАрдорд╛ рдерд╛рд╣рд╛ рдЫреИрди, рдпрд╕рдмрд╛рд╣реЗрдХ, Hive рдорд╛ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдЧрд▓рдд рд╕реНрдХреАрдорд╛ рдЫ, рдХрд┐рдирдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд╡рд┐рднрд╛рдЬрдирд▓реЗ рдкреНрд░рд╛рдп: рд╕реНрдХрд┐рдорд╛рдорд╛ рд╡рд┐рд░реВрдкрдг рдкреНрд░рд╕реНрддреБрдд рдЧрд░реЗрдХреЛ рдЫред

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

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

рдпреЛ рдерд╛рд╣рд╛ рдкрд╛рдЙрдБрджрд╛, рд╣рд╛рдореАрд▓реЗ рдпреЛрдЬрдирд╛ рдкрд╛рдЙрдБрдЫреМрдВ:

f_def = ""
for f in pf.dtypes:
  if f[0] != "date_load":
    f_def = f_def + "," + f[0].replace("_corrupt_record", "`_corrupt_record`") + " " + f[1].replace(":", "`:").replace("<", "<`").replace(",", ",`").replace("array<`", "array<") 
table_define = "CREATE EXTERNAL TABLE jsonevolvtable (" + f_def[1:] + " ) "
table_define = table_define + "PARTITIONED BY (date_load string) STORED AS PARQUET LOCATION '/user/admin/testJson/testSchemaEvolution/pq/'"
hc.sql("drop table if exists jsonevolvtable")
hc.sql(table_define)

рдХреЛрдб ("_corrupt_record", "`_corrupt_record`") + "" + f[1]редрдмрджрд▓реНрдиреБрд╣реЛрд╕реН(":", "`:")редрдмрджрд▓реНрдиреБрд╣реЛрд╕реН("<", "<`")редрдмрджрд▓реНрдиреБрд╣реЛрд╕реН(",", ",`") рдмрджрд▓реНрдиреБрд╣реЛрд╕реН(" array<`", "array<") рд╕реБрд░рдХреНрд╖рд┐рдд DDL рдмрдирд╛рдЙрдБрдЫ, рдЕрд░реНрдерд╛рддреН:

create table tname (_field1 string, 1field string)

рдХреНрд╖реЗрддреНрд░ рдирд╛рдорд╣рд░реВ рдЬрд╕реНрддреИ "_field1, 1field", рд╕реБрд░рдХреНрд╖рд┐рдд DDL рдмрдирд╛рдЗрдиреНрдЫ рдЬрд╣рд╛рдБ рдлрд┐рд▓реНрдб рдирд╛рдорд╣рд░реВ рдПрд╕реНрдХреЗрдк рд╣реБрдиреНрдЫрдиреН: рддрд╛рд▓рд┐рдХрд╛ `tname` (`_field1` string, `1field` string) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдкреНрд░рд╢реНрди рдЙрдареНрдЫ: рдХрд╕рд░реА рдПрдХ рдкреВрд░реНрдг рд╕реНрдХреАрдорд╛ (pf рдХреЛрдб рдорд╛) рд╕рдВрдЧ рдбрд╛рдЯрд╛рдлреНрд░реЗрдо рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ? рдпреЛ pf рдХрд╕рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ? рдпреЛ рдкрд╛рдБрдЪреМрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛред рд▓рдХреНрд╖реНрдп рд╢реЛрдХреЗрд╕рдХреЛ рдкрд╛рд░реНрдХреЗрдЯ рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд╣рд┐рдд рдлреЛрд▓реНрдбрд░рдмрд╛рдЯ рд╕рдмреИ рд╡рд┐рднрд╛рдЬрдирд╣рд░реВрдХреЛ рдпреЛрдЬрдирд╛ рдкреБрди: рдкрдвреНрдиреБрд╣реЛрд╕реН? рдпреЛ рд╡рд┐рдзрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд, рддрд░ рдЧрд╛рд╣реНрд░реЛ рдЫред

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

рд╡рд╛рд╕реНрддрд╡рдорд╛, рддреНрдпрд╣рд╛рдБ рддрдкрд╛рдИрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рд╕рдмреИ рдХреБрд░рд╛ рдЫ: Hive рдорд╛ рдореВрд▓ рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдХреАрдорд╛ рд░ рдирдпрд╛рдБ рд╡рд┐рднрд╛рдЬрдиред рд╣рд╛рдореАрд╕рдБрдЧ рддрдереНрдпрд╛рдВрдХ рдкрдирд┐ рдЫ ред рдпреЛ рдирдпрд╛рдБ рд╕реНрдХреАрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдорд╛рддреНрд░ рдмрд╛рдБрдХреА рдЫ рдЬрд╕рд▓реЗ рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯ рд╕реНрдХреАрдорд╛ рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рд╡рд┐рднрд╛рдЬрдирдмрд╛рдЯ рдирдпрд╛рдБ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрджрдЫ:

from pyspark.sql import HiveContext
from pyspark.sql.functions import lit
hc = HiveContext(spark)
df = spark.read.json("...", dropFieldIfAllNull=True)
df.write.mode("overwrite").parquet(".../date_load=12-12-2019")
pe = hc.sql("select * from jsonevolvtable limit 1")
pe.write.mode("overwrite").parquet(".../fakePartiton/")
pf = spark.read.option("mergeSchema", True).parquet(".../date_load=12-12-2019/*", ".../fakePartiton/*")

рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рддрд╛рд▓рд┐рдХрд╛ рджрд░реНрддрд╛ DDL рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ, рдЕрдШрд┐рд▓реНрд▓реЛ рд╕реНрдирд┐рдкреЗрдЯрдорд╛ рдЬрд╕реНрддреИред
рдпрджрд┐ рд╕рдореНрдкреВрд░реНрдг рдЪреЗрдирд▓реЗ рд╕рд╣реА рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗ, рдЕрд░реНрдерд╛рддреН, рддреНрдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд▓реЛрдб рдерд┐рдпреЛ, рд░ Hive рдорд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕рд╣реА рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореАрд▓реЗ рдЕрдкрдбреЗрдЯ рдЧрд░рд┐рдПрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдХреАрдорд╛ рдкрд╛рдЙрдБрдЫреМрдВред

рд░ рдЕрдиреНрддрд┐рдо рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ Hive рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд╡рд┐рднрд╛рдЬрди рдорд╛рддреНрд░ рдердкреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрди, рдХрд┐рдирднрдиреЗ рдпреЛ рднрд╛рдБрдЪрд┐рдиреЗрдЫред рддрдкрд╛рдИрдВрд▓реЗ Hive рд▓рд╛рдИ рдпрд╕рдХреЛ рд╡рд┐рднрд╛рдЬрди рд╕рдВрд░рдЪрдирд╛ рдареАрдХ рдЧрд░реНрди рдмрд▓ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

from pyspark.sql import HiveContext
hc = HiveContext(spark) 
hc.sql("MSCK REPAIR TABLE " + db + "." + destTable)

JSON рдкрдвреНрдиреЗ рд░ рддреНрдпрд╕рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╕реНрдЯреЛрд░рдлреНрд░рдиреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд▓реЗ рдзреЗрд░реИ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрдард┐рдирд╛рдЗрд╣рд░реВ рдкрд╛рд░ рдЧрд░реНрди рдкрд░рд┐рдгрд╛рдо рджрд┐рдиреНрдЫ, рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЫреБрдЯреНрдЯреИ рдЦреЛрдЬреНрдиреБрдкрд░реНрдЫред рд░ рдпрджреНрдпрдкрд┐ рдпреА рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рд╕рд░рд▓ рдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрдЫред

рд╢реЛрдХреЗрд╕рдХреЛ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ:

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

рд╕рдВрдХреНрд╖реЗрдкрдорд╛, рд╣рд╛рдореА рдиреЛрдЯ рдЧрд░реНрдЫреМрдВ рдХрд┐ рдкрд╕рд▓ рд╡рд┐рдиреНрдбреЛрдЬрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдзреЗрд░реИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрд▓реЗ рднрд░рд┐рдПрдХреЛ рдЫред рддрд╕рд░реНрде, рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рдХрдард┐рдирд╛рдЗрд╣рд░реВ рд╕рд╛рдордирд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рд╕рдлрд▓ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛рдХреЛ рд╕рд╛рде рдЕрдиреБрднрд╡реА рд╕рд╛рдЭреЗрджрд╛рд░рд▓рд╛рдИ рд╕рдореНрдкрд░реНрдХ рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫред

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

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди