我有一个很长的生成器函数,我想使用 Polars 将其处理为一个列。由于它的大小,我想使用生成器作为源以惰性流模式运行它,但我一直无法弄清楚如何去做(如果可能的话)。
创建一个普通的数据框然后转换为惰性数据框显然是行不通的,因为在懒惰计划运行之前生成器已经耗尽
collect()
。这也发生在 LazyFrame 初始化程序中,它只是上面的快捷方式。
有没有其他选项不涉及写入然后扫描 csv?
示例代码:
import polars as pl
def Generator():
yield 1
yield 2
yield 3
generator = Generator()
df = pl.DataFrame({"a": generator}).lazy()
print(df)
# naive plan...
print([i for i in generator])
# []
generator2 = Generator()
df = pl.LazyFrame({"a": generator2})
print(df)
# naive plan...
print([i for i in generator2])
# []