在 Python 中使用 Pandas,是否可以分块读取 4B 行并根据内存中已有的 30M 行数据帧过滤每个卡盘?

In Python using Pandas, is it possible to read 4B rows chunkwise and filter each chuck against a 30M row dataframe already in memory?

在 Oracle 中有一个 4B 行 table 和一个 30M 行 CSV,两个 table 共享 2 列,我想使用较小的 [= 过滤大 table 24=]。由于安全限制,我无法将 30M 行 CSV 加载到 Oracle 和 运行 一个理想的单个连接中。我也曾尝试将 SAS Enterprise Guide 用于此过程,但它似乎在连接到 Oracle table 超时之前因大型连接而无法 return。

Python 似乎是一个可能的解决方案,但 4B 行 table 将不适合内存,即使减少到我需要的 6 列(6 个字符串,每个字符串在 25 个字符以下)。理想情况下,我想执行以下操作:

csv_df = pd.read_csv(file_path)
result_df = (empty dataframe)
df_chunks = pd.read_sql(sql_query, con, chunksize = 10000000)
    for df_chunk in df_chunks:
      # convert chunk to dataframe
      # join chunk_dataframe to csv_df to get a filtered result
      # concatenate filtered result to result_df

数据框 result_df 将成为 4B 行 Oracle table.

中所有过滤行的集合

感谢您的帮助!

你可以这样做:

csv_df = pd.read_csv(file_path)
result_df = (empty dataframe)
df_chunks = pd.read_sql(sql_query, con, chunksize = 10000000)
chunk_list = []
for df_chunk in df_chunks:
    result = pd.merge(df_chunk, csv_df, on=['XXX'])
    chunk_list.append(result)
result_df = pd.concat(chunk_list)