You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pinecone load_dataset行为异常:为何get_dataset2返回空数据集?

问题原因分析:为什么get_dataset2加载的数据集长度为0?

以下程序包含三个逻辑相似的函数get_dataset1、get_dataset2和get_dataset3,仅在调用len(dataset)与恢复os.path.join的时机上存在差异。其中get_dataset1和get_dataset3加载的数据集长度大于0,符合预期,但get_dataset2加载的数据集长度为0,具体代码如下:

import copy
import os
import time

from pinecone_datasets import load_dataset

datasetName = "langchain-python-docs-text-embedding-ada-002"


def get_dataset1():
    os.path.join = lambda *s: "/".join(s)  # pinecone bug workaround
    dataset = load_dataset(datasetName)
    print("Dataset loaded:", len(dataset) != 0)  # dataset has length greater than 0


def get_dataset2():
    os.path.join = lambda *s: "/".join(s)  # pinecone bug workaround
    dataset = load_dataset(datasetName)
    os.path.join = tmp
    print("Dataset loaded:", len(dataset) != 0)  # dataset has length 0


def get_dataset3():
    os.path.join = lambda *s: "/".join(s)  # pinecone bug workaround
    dataset = load_dataset(datasetName)
    print("Dataset loaded:", len(dataset) != 0)  # dataset has length greater than 0
    os.path.join = tmp
    print("Dataset loaded:", len(dataset) != 0)  # dataset has length greater than 0


def main():
    get_dataset1()
    get_dataset2()
    get_dataset3()


if __name__ == "__main__":
    tmp = copy.deepcopy(os.path.join)
    main()

核心原因:延迟加载机制的影响

pinecone_datasets.load_dataset返回的是**延迟加载(lazy-loading)**的数据集对象:

  • 调用load_dataset时并没有实际完成数据的加载或长度统计,只是创建了一个数据集的引用对象。
  • 只有当首次调用len(dataset)、迭代数据集元素等操作时,才会触发实际的数据读取和长度计算逻辑。

结合三个函数的执行流程具体分析:

  • get_dataset1:调用len(dataset)时,os.path.join仍然是被替换后的自定义lambda(也就是修复pinecone路径bug的workaround),此时触发数据读取时能正确处理路径,因此可以统计到正确的数据集长度。
  • get_dataset2:在调用len(dataset)之前就恢复了原始的os.path.join,此时触发数据读取时,pinecone的路径bug没有被修复,导致无法正确读取数据,最终统计出的长度为0。
  • get_dataset3:第一次调用len(dataset)时,os.path.join还处于被替换的状态,已经完成了数据长度的统计(或关键的数据加载步骤),后续恢复os.path.join不会影响已经加载完成的结果,因此两次打印都显示数据集有数据。

内容的提问来源于stack exchange,提问作者Imago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:33:20