我有一个包含1M列和10M行的表。该表在文件中逐行存储。我想将表转换为基于列的表(按列存储)。
本机方法需要1M次传递文件,每次传递都会提取一整列数据。
或者我可以先将基于行的表拆分为K个小文件。例如,如果原始存储是
A1 B1 ... Z1 A1 B2 ... Z2 ....... An Bn ... Zn
我在一次通过后将它们分成k个文件。 (理想情况下我想将它们分成10M文件,但我不确定是否可以将10M文件合并在一起,无需打开/关闭它们以保存文件句柄)
A1 B1 ... Z1 A1 B2 ... Z2 ....... Ab Bb ... Zb
Ab+1 Bb+1 ... Zb+1 Ab+2 Bb+2 ... Zb+2 ... A2b B2b ... Z2b
...
A(k-1)b+1 B(k-1)b+1 ... ... Akb Bkb ... Zkb
然后合并后,我会 A1Ab + 1 ... A(K-1)B + 1B1Bb + 1 ... B(K-1)B + 1 ... ZbZ2bZkb
然后我再次拆分它们,然后合并,直到它们被列存储。如果R是行,C是列,这可能需要logk(RC)* RC成本。它还有很多文件读/写。
此问题类似于将大行存储矩阵转换为列存储矩阵,或将基于行的数据库转换为基于列的数据库。今天解决问题的最先进方法是什么?