我目前正在尝试从 R 到 Python 的两次切换。我正在为 Uni 项目使用大表。我通过以下命令将数据作为 Snowflake 对象加载到 R 中:
con <-
nuvolos::get_connection()
db_mcc_desc <-
dplyr::tbl(con, "Table")
“表”大约有 100GB,所以我真的很喜欢我可以在 db_mcc_desc 上使用许多 dplyr 函数,而无需将其加载到内存中。无论何时需要,我都可以创建较小的数据帧并使用
collect()
将它们加载到内存中。
但是,当使用以下 pandas 命令时,它会自动读取一个数据帧,该数据帧很快就超出了我的记忆。
import pandas as pd
from nuvolos import get_connection
con = get_connection()
db_mcc_desc = pd.read_sql_table('SELECT * TABLE', con=con)
普通批处理实际上不起作用,因为表太大了。 Pandas 中是否有与 R 的 dplyr 包中提供的类似且简单的解决方案。
非常感谢!
在幕后,我的理解是 tbl 只是 惰性评估 SQL,也就是说,它让你可以针对表编写 SQL,而无需执行它。
使用 Snowflake 实现此目的的一种方法是使用 Snowpark 来实现此目的。它创建一个虚拟数据帧,您可以查询/操作该数据帧,而无需将整个数据读入内存。
这可能是这样的:
from snowflake.snowpark import Session
from snowflake.snowpark.functions import col
...
df = session.table("TABLE")
filtered_df = df.filter(col("some_column") == "some_value")
filtered_df.show()
或者,Ibis 似乎是一个有信誉的 python 包,你可以在这里使用:
从 R 切换很痛苦,dplyr 很棒!