我在成千上万的.parquet文件中存储了大约25gb。它们看起来像这样:
def build_id_map(self, df):
df = df.drop_duplicates()
def check_existence(row):
if row['id'] not in self.id_dict:
self.id_dict[row['id']] = [row['value']]
else:
if row['id'] not in self.id_dict[row['id']]:
self.id_dict[row['id']].append(row['value'])
df.apply(check_existence, axis=1)
每个ID本身都是唯一的,但是,一个ID可以有多个条目(具有相同和不同的值)。
我想:
基本上,我实现了所有这些(包括)第3步。但是,当我在每个数据框上进行迭代时,字典的构建时间太长了:
参数' df'是步骤1的结果,即转换后的.parquet文件。该函数是类的一部分(这就是 self 的原因),并在另一个函数中调用,该函数使用多处理和8个核执行。字典本身是类的成员变量(共享对象),并且是迭代构建的。
select s.*
from subscription_stats s
where s.day = (select max(s2.day)
from subscription_stats s2
where s2.year = s.year and s2.month = s.month
);
我正在寻找一种更有效的解决方案来构建这个字典,因为目前,1个文件需要大约15秒,这对于大量文件来说太多了。
此外,我很高兴听到有关如何有效实现第4点的想法。