Daft 类型转换完全指南:DataType 与 Python 类型之间的双向映射机制

发布时间:2026/11/10 9:19:46

Daft 类型转换完全指南:DataType 与 Python 类型之间的双向映射机制 Daft 类型转换完全指南DataType 与 Python 类型之间的双向映射机制【免费下载链接】DaftHigh-performance data engine for AI and multimodal workloads. Process images, audio, video, and structured data at any scale项目地址: https://gitcode.com/GitHub_Trending/da/Daft本文围绕 Daft 官方文档 Type Conversions 展开系统讲解 Daft DataType 与 Python 类型之间的双向转换规则Daft 到 Python 的取值映射如Series.to_pylist、Python 类型到 Daft 类型的静态推断如daft.func的返回类型提示、以及基于 Python 对象字面值的运行时推断如daft.from_pydict。读完本文你将能够准确预测任意 Python 类型/对象在 Daft 中被映射为哪种 DataType也能结合 daft/datatype.py 的源码实现理解各推断分支的边界条件与警告行为。Daft 到 Python取值时的类型映射当你从 Daft 数据中取出 Python 值时典型场景包括 [Series.to_pylist][daft.series.Series.to_pylist]、将列 [cast][daft.expressions.Expression.cast] 到 Python 类型、以及传递给daft.func装饰函数的参数Daft DataType 按如下规则映射为 Python 类型Daft DataTypePython TypeNullNoneBooleanboolUtf8strBinaryFixedSizeBinarybytesInt8Uint8Int16UInt16Int32UInt32Int64UInt64intTimestampdatetime.datetimeDatedatetime.dateTimedatetime.timeDurationdatetime.timedeltaIntervalnot supportedFloat32Float64floatDecimal128decimal.DecimalList[T]FixedSizeList[T, n]list[T]Struct[k1: T1, k2: T2, ...]{ k1: T1, k2: T2, ... }Map[K, V]list[tuple[K, V]]默认maps_as_pydicts下为dict[K, V]Tensor[T]FixedShapeTensor[T, [...]]numpy.typing.NDArray[T]SparseTensor[T]FixedShapeSparseTensor[T, [...]]{values: T,indices: [int],shape: [int]}Embedding[T]numpy.typing.NDArray[T]Imagenumpy.typing.NDArray[numpy.uint8 \| numpy.uint16 \| numpy.float32]PythonAnyExtension[T]T从源码结构看上述行为对应 Rust 侧impl IntoPyObject for Literal的实现入口位于 src/daft-core/src/lit/python.rs文档中的注释即要求该表与 Rust 的Literal转 Python 对象行为保持一致。Map 类型的两种取值模式maps_as_pydicts对Map[K, V]列取 Python 值时Daft 默认转换为list[tuple[K, V]]关联列表目的是保留重复键与键的顺序。若希望得到 Pythondict可在Series.to_pylist等接口上传入maps_as_pydicts参数maps_as_pydictslossy遇到重复键时保留最后一个值并发出警告maps_as_pydictsstrict遇到重复键时直接抛出异常。该参数在 Python 层的签名与文档位于 daft/series.py#L231-L241底层由self._series.to_pylist(maps_as_pydicts)转发给 Rust 实现完成实际转换。选择建议如果下游逻辑依赖每个键唯一的 dict 语义且能容忍静默丢失用lossy如果数据源保证键唯一、或需要尽早暴露脏数据用strict更稳妥。Python 类型到 Daft静态类型推断当 Daft 需要根据Python 类型而非具体值推导 DataType 时——例如从daft.func装饰函数的类型注解推断返回列的类型——使用的是DataType.infer_from_type类方法。你可以直接调用它来验证任意 Python 类型的推断结果Python TypeDaft DataTypeNoneTypeNullboolBooleanstrUtf8bytesBinaryintInt64floatFloat64datetime.datetimeTimestamp[us]datetime.dateDatedatetime.timeTime[us]datetime.timedeltaDuration[us]list[T]List[T]dict[K, V]Map[K, V]typing.TypedDict(..., { k1: T1, k2: T2, ... })Struct[k1: T1, k2: T2, ...]tuple[T0, T1, ..., TN]实际类型中不含省略号Struct[_0: T0, _1: T1, ..., _N: TN]tuple[T, ...]List[T]带序列化字段f1: T1,f2: T2, ... 的pydantic.BaseModelStruct[f1: T1, f2: T2, ...]numpy.ndarraytorch.Tensortensorflow.Tensorjax.Arraycupy.ndarrayTensor[Python]numpy.typing.NDArray[T]Tensor[T]torch.FloatTensorTensor[Float32]torch.DoubleTensorTensor[Float64]torch.ByteTensorTensor[UInt8]torch.CharTensorTensor[Int8]torch.ShortTensorTensor[Int16]torch.IntTensorTensor[Int32]torch.LongTensorTensor[Int64]torch.BoolTensorTensor[Boolean]jaxtyping类型见下文 jaxtyping 小节Tensor 或 FixedShapeTensornumpy.bool_Booleannumpy.int8Int8numpy.uint8UInt8numpy.int16Int16numpy.uint32/numpy.uint64等对应 numpy 整型UInt32 / UInt64 等numpy.float32Float32numpy.float64Float64numpy.datetime64Timestamp[us]pandas.SeriesList[Python]PIL.Image.ImageImage[MIXED]daft.SeriesList[Python]其他所有类型Python推断实现的关键分支源码解读infer_from_type的完整实现位于 daft/datatype.py#L183-L404其中几个容易被忽略的分支值得注意Union 类型先对 Union 的每个成员递归推断。若所有成员推断出同一种 DataType则取之若是Optional[X]即Union[NoneType, X]则退化为X否则兜底为Python类型。TypedDict 与 dict 的区别dict[K, V]推断为Map[K, V]因为仅从类型上无法得到具体的字段名而TypedDict的键是已知的因此能推断为Struct。源码中若发现 TypedDict 的键不是字符串会降级为Map[Python, Python]并告警。tuple 的两种形态tuple[int, str]这类定长元组映射为Struct[_0: ..., _1: ...]字段名为自动生成的下标而tuple[T, ...]带省略号的无限元组则映射为List[T]。Pydantic V2 支持对pydantic.BaseModel的推断仅支持 Pydantic V2源码中显式校验2.0.0 version 3.0.0并按model_config的serialize_by_alias决定 Struct 字段名取别名还是属性名同时会把model_computed_fieldscomputed field也纳入 Struct 字段。Tensor 类型族的精确匹配torch的 7 种具名 Tensor 子类各自映射到对应 dtype而泛化的torch.Tensor、tensorflow.Tensor、jax.Array、cupy.ndarray由于无法在类型层面得到 dtype统一推断为Tensor[Python]。numpy 侧NDArray[T]的第二个类型参数会被解出并映射为内层 dtype解不出来时告警并回退Tensor[Python]。无法静态推断的兜底decimal.Decimal类型无法从类型得到 precision/scale、裸的pandas.Series、daft.Series都会发出警告并回退为Python或List[Python]表外的任意类型一律落到Python类型分支。jaxtyping从注解中推断 dtype 与 shapejaxtyping 库为 NumPy、PyTorch、TensorFlow、JAX 的数组类型提供 dtype 与 shape 注解。Daft 可以原生解析jaxtyping注解同时推断出张量的内层 dtype 和形状。对应实现是 daft/datatype.py 中的_infer_from_jaxtyping。示例jaxtyping.Float64[jaxtyping.Array, 1 2 3 4]→FixedShapeTensor[Float64, [1, 2, 3, 4]]jaxtyping.Int8[torch.Tensor, dim1 dim2]→Tensor[Int8]Dtype 推断jaxtyping TypeDaft DataTypeBoolBooleanInt8Int8UInt8UInt8Int16Int16UInt16UInt16Int32Int32UInt32UInt32Int64IntIntegerInt64UInt64UIntUInt64Float32Float32Float64FloatRealFloat64Everything elsePython注这里得到的 DataType 是结果Tensor/FixedShapeTensor的内层类型。Shape 推断jaxtyping类型的第二个泛型参数是一个空格分隔的符号字符串表示数组形状。Daft 的推断策略与源码中仅当所有维度都是固定值_FixedDim时才写入 shape的逻辑一致若所有维度均为固定尺寸推断为FixedShapeTensor例如1 2 3、rows4 cols3、标量形状否则推断为Tensor例如dim1 dim2、512 512 _、... 1 2 3。Python 对象到 Daft运行时值推断除了上表的类型级映射Daft 在未显式指定类型、直接把 Python 对象转换为 Daft 列时典型场景daft.from_pydict、Series.from_pylist还能从对象的具体值中提取类型信息得到比纯类型推断更精确的 DataType。对应方法为DataType.infer_from_object——其实现是通过Series.from_pylist([obj])构造单元素 Series 再读取其datatype()因此你可以用同一入口验证任意对象的推断结果。在类型级映射的基础上对象级推断有以下额外行为Python ObjectDaft Type大于 2^63-1Int64 最大值的int值UInt64形如{ k1: T1, k2: T2, ... }的dictStruct[k1: T1, k2: T2, ...]小数点后 N 位的decimal.DecimalDecimal128[precision38, scaleN]元素类型为T的pandas.SeriesList[T]元素类型为T的daft.SeriesList[T]带有 numpy dtypeT的numpy.ndarray/torch.Tensor/tensorflow.Tensor/jax.Array/cupy.ndarrayTensor[T]单位为U的numpy.datetime64U Y、M、W、D 时为 DateU h、m、s 时为 Timestamp[s]U ms 时为 Timestamp[ms]U us 时为 Timestamp[us]U ns、ps、fs、as 时为 Timestamp[ns]模式为M的PIL.Image.Image支持的模式L、LA、RGB、RGBAImage[M]可以看到对象级推断的核心价值在于利用运行时信息收紧类型dict的键值对能落成具体字段的 Struct 而非 MapDecimal能定出 scaledatetime64能按单位精细区分 Date/Timestamp 及各精度PIL 图像能保留具体通道模式。这与Python 到 Daft一节中dict只能推断为Map[K, V]、PIL.Image.Image只能推断为Image[MIXED]形成了清晰对照——类型层面看不到键名和值范围对象层面可以。实践建议写 UDF 时优先声明类型注解daft.func的返回类型注解会走infer_from_type路径直接决定输出列的 DataType。给张量返回值使用jaxtyping或具名 torch Tensor 类型可以获得带 dtype甚至带 shape的 Tensor 列而不是宽泛的Tensor[Python]。需要精确类型时用cast显式声明对象级推断无法覆盖的场景如混合类型列表应通过 [Expression.cast][daft.expressions.Expression.cast] 显式指定目标类型而不是依赖推断。取 Map 列值前先确认键唯一性默认list[tuple[K, V]]是最安全的形式只有确认数据干净或可接受覆盖语义时再使用maps_as_pydictslossy/strict换取 dict 便利性。验证推断结果怀疑某个注解/对象推断结果时直接调用DataType.infer_from_type/DataType.infer_from_object打印结果即可二者行为与转换管线保持一致。参考类型转换规则原文档docs/api/datatypes/type_conversions.mdPython 类型推断实现daft/datatype.pyinfer_from_type、_infer_from_jaxtyping、infer_from_objectto_pylist与maps_as_pydictsdaft/series.pyRust 侧字面量转 Python 的实现src/daft-core/src/lit/python.rs【免费下载链接】DaftHigh-performance data engine for AI and multimodal workloads. Process images, audio, video, and structured data at any scale项目地址: https://gitcode.com/GitHub_Trending/da/Daft创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/10 9:19:46

手机SoC性能天梯怎么看?从制程、架构到持续性能的选购避坑指南

拖了快两个月,这版“性能天梯”总算更新完了。期间有朋友催问为什么这么久,原因很实在——这次没有停留在“谁跑分高谁排前”的粗浅逻辑,而是把范围从旗舰机扩到了在售主流百款机型,重新梳理了SoC芯片的性能基准、功耗表现和实际体…

2026/11/10 4:12:29

2026年广州房屋防水补漏怎么选?施工前这几个问题要问清

广州的防水补漏市场,水挺深。同一个小漏点,有人报三百,有人报三千,还有人拍着胸脯说“包十年不漏”,转头第二年就找不到人。价格差这么多,不是行情乱,是漏点没查清就报价,报的自然是…

2026/11/10 9:17:36

全职人员怎么考电工证怎么报名才能顺利通过

全职人员怎么考电工证怎么报名才能顺利通过 之前考的证在外省能不能转过来?这是很多全职人员在考电工证时最担心的问题。如果你也在外地工作,想把电工证转回老家,或者打算在本地考个新证,这篇文章就是为你准备的。下面我用平顶山在职建筑工人的视角,帮你…

2026/11/10 9:17:36

新乡电工从业者必看!电工作业中问题全解+良心建议

新乡电工从业者必看!电工作业中问题全解+良心建议 你是不是也这样,拿着电工证却不知道到底能干啥?报名时被中介忽悠,考试时又抓不住重点,证书补办时更是手忙脚乱? 电工作业中问题 ,其实很多人都在经历,但真正懂流程、懂细节的人少之又少。…

2026/11/10 9:17:36

新能源货车电工证值不值得考?转岗从业者必看的干货指南

新能源货车电工证值不值得考?转岗从业者必看的干货指南 急需特种作业证才能上岗找工作,这是很多想进入新能源货车行业从业者的共同焦虑。新能源货车电工证,听起来陌生,但其实它正在成为新能源物流、运输、充电等领域的重要通行证。很多人会问,…

2026/11/10 9:17:36

新能源货车电工证网上查询怎么查最靠谱

新能源货车电工证网上查询怎么查最靠谱 实操考试心里没底怕挂科,特别是新能源货车电工证这类新兴领域,很多人都不清楚怎么查证自己的证书信息,也不知道如何有效备考。其实,网上查询只是第一步,真正重要的还是了解整个流程和备考策略,才能避免走弯路。…

2026/11/10 9:17:36

电工证可以快递吗?通过率揭秘!实操考试心里没底怕挂科?

电工证可以快递吗?通过率揭秘!实操考试心里没底怕挂科? 你有没有过这种感觉:站在实操考试现场,手心冒汗,工具都拿不稳,心里想着“这下完了,肯定考不过”。别担心,很多电工证学员都会有这种焦虑。特别是在新乡地区,电工证的考试要求和流程并不像网上…

2026/11/10 9:12:35

镇巴县电工证培训机构在哪考?上岗求职必看的电工证备考攻略

镇巴县电工证培训机构在哪考?上岗求职必看的电工证备考攻略 你是不是正为找工作发愁?手上没有电工证,根本不敢去工地、工厂或者建筑公司应聘。特别是现在,很多岗位都要求持证上岗,没有电工证,连面试机会都没有。**镇巴县电工证培训机构在哪考?**今…

2026/11/10 8:12:38

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/10 0:01:28

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了 你是不是也担心自己学历不高,考电工证报名费太贵,根本报不上名?别急,今天就来给你讲讲,怎么用最少的钱,把证拿到手,还能在工地上多挣点钱。 电工证报名费多少钱?网上查询是关键…

2026/11/10 0:01:29

绍兴考电工证培训机构怎么选?2026河南最新政策别错过

绍兴考电工证培训机构怎么选?2026河南最新政策别错过 怕考不过白交培训费?你不是一个人。2026河南最新政策出台,对电工证考试、报名、培训、复审都有明确规定。选择绍兴考电工证培训机构,别再踩坑,下面一步步教你避坑。…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑