рдЕрдЬрдЧрд░ рдореЗрдВ рдЕрддреБрд▓рдиреАрдп рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдкрд╛рдЪреЗ рд▓рдХрдбрд╝реА рдХреА рдЫрдд I / O рдкреНрд░рджрд░реНрд╢рди

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




рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ Parquet рдПрдХ рдЫреЛрдЯреЗ рдкрджрдЪрд┐рд╣реНрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдХреИрд╕реЗ рд╕рдВрдЧрддрд┐ (рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ I / O рд╕реНрдЯреНрд░реАрдо рдХреА рдмреИрдВрдбрд╡рд┐рдбреНрде рд╕реЗ рдЕрдзрд┐рдХ рдмреИрдВрдбрд╡рд┐рдбреНрде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрд╛рдЪреЗ рд▓рдХрдбрд╝реА рдХреА рдЫрдд: рдХрдо Entropy рдбреЗрдЯрд╛ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдкрд╛рдЪреЗ рд▓рдХрдбрд╝реА рдХреА рдЫрдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ , рдЗрд╕рдореЗрдВ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдХрдИ рд╕реНрддрд░ рд╣реИрдВ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╣реИрдВ:

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

рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рджреЗрдЦреЗрдВ:

['banana', 'banana', 'banana', 'banana', 'banana', 'banana',
 'banana', 'banana', 'apple', 'apple', 'apple']

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

dictionary: ['banana', 'apple']
indices: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреЛрд╣рд░рд╛рд╡ рдХреЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрдХреБрдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:

dictionary: ['banana', 'apple']
indices (RLE): [(8, 0), (3, 1)]

рд╡рд╛рдкрд╕реА рдкрде рдХреЗ рдмрд╛рдж, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдореВрд▓ рд╕рд░рдгреА рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

import pyarrow.parquet as pq

pq.write_table(dataset, out_path, use_dictionary=True,
               compression='snappy)

рдПрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдЬреЛ 1 рдЬреАрдмреА (1024 рдПрдордмреА) рдореЗрдВ pandas.DataFrameрд▓реЗрддрд╛ рд╣реИ, рд╕реНрдиреЗрдкреА рд╕рдВрдкреАрдбрд╝рди рдФрд░ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╕рд╛рде, рдХреЗрд╡рд▓ 1.436 рдПрдордмреА рд▓реЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдПрдХ рдбрд┐рд╕реНрдХреЗрдЯ рдХреЛ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрдкреАрдбрд╝рди, рдпрд╣ 44.4 рдПрдордмреА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛ред

PyArrow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдХрдбрд╝реА рдХреА рдЫрдд рдореЗрдВ рд╕рдорд╡рд░реНрддреА рдкрдврд╝рдирд╛


рд╕реА ++ рдореЗрдВ рдЕрдкрд╛рдЪреЗ рд▓рдХрдбрд╝реА рдХреА рдЫрдд рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ - рд▓рдХрдбрд╝реА рдХреА рдЫрдд-рд╕реАрдкреАрдкреА , рдЬрд┐рд╕реЗ рд╣рдордиреЗ PyArrow рдореЗрдВ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдерд╛, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХреЙрд▓рдо рдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП, CondA-forge рд╕реЗ PyArrow рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ :

conda install pyarrow -c conda-forge

рдЕрдм Parquet рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдк рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ nthreads:

import pyarrow.parquet as pq

table = pq.read_table(file_path, nthreads=4)

рдХрдо рдПрдиреНрдЯреНрд░реЙрдкреА рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП, рдбрд┐рдХрдореНрдкреНрд░реЗрд╕рди рдФрд░ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдмрдВрдзреЗ рд╣реЛрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ C ++ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП GIL рд╕рдорд╡рд░реНрддреА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдо рдЧрддрд┐ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрд╡рд╛рдб-рдХреЛрд░ рд▓реИрдкрдЯреЙрдк (Xeon E3-1505M, NVMe SSD) рдкрд░ рдПрдХ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ 1 рдЬреАрдмреА рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрдврд╝рдХрд░ рдореИрдВ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрд╛ :



рдЖрдк рдпрд╣рд╛рдВ рдкреВрд░рд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдкрд░рд┐рджреГрд╢реНрдп рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рдореИрдВрдиреЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рджреЛрдиреЛрдВ рд╕рдВрдкреАрдбрд╝рди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдХрдо рдПрдиреНрдЯреНрд░реЙрдкреА рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдЫреЛрдЯреА рд╣реИрдВ (~ 1.5 рдПрдордмреА рдбрд┐рдХреНрд╢рдирд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдФрд░ ~ 45 рдПрдордмреА рдмрд┐рдирд╛), рдбрд┐рдХреНрд╢рдирд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдВрдкреАрдбрд╝рди рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред 4 рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде, рдкрдВрдбреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди 4 рдЬреАрдмреА / рдПрд╕ рддрдХ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрдВрдЦ рдкреНрд░рд╛рд░реВрдк рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреНрдЮрд╛рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред

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


рд╕рдВрд╕реНрдХрд░рдг 1.0 рдХреЗ рд╡рд┐рдореЛрдЪрди рдХреЗ рд╕рд╛рде (рд╕реА ++ рдореЗрдВ рдЕрдкрд╛рдЪреЗ рд▓рдХрдбрд╝реА рдХреА рдЫрдд), рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ I / O рдкреНрд░рджрд░реНрд╢рди рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдм рдкрд╛рдпрдерди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред

рдЪреВрдВрдХрд┐ рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рддрдВрддреНрд░ C ++ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, R), рдЖрдк Apache Arrow (рд╕реНрддрдВрдн рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ) рдФрд░ рд▓рдХрдбрд╝реА рдХреА рдЫрдд-рд╕реАрдкреАрдкреА рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ ред рдкрд╛рдпрдереЙрди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛрд░ рд▓рд┐рдмреЗрд░реЛ рдФрд░ рд▓реАрд╡рд░рдкрд╛рд░реНрдХ C ++ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╣рд▓реНрдХрд╛ рдЦреЛрд▓ рд╣реИ ред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдпрджрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ , рддреЛ рдПрдХ рдЦреБрд▓реЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░реЗрдВ , рдЬреЛ рдЖрдЬ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛!

All Articles