在 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)
在 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)