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

如何在Arrow中按原变量类型创建匹配CSV列顺序的Schema?

修复Arrow包中Schema字段顺序不匹配的问题

你的问题出在my_schema_2的创建逻辑上:代码把所有数值型字段放在前面,字符型字段放在后面,完全打乱了sample.csv的原始列顺序,而Arrow读取CSV时要求Schema的字段顺序必须和数据源的列顺序一致,因此导致读取失败。

修复方案

保持原数据lakers的列顺序,逐个判断每个字段的类型并生成对应的Field,不要分组拼接数值型和字符型字段。

修改后的完整代码:

library(tidyverse)
library(arrow)
library(lubridate)
data(lakers)

# 创建sample.csv文件
write.csv(lakers,"sample.csv",row.names = FALSE)

# 修复后的my_schema_2:按原列顺序生成Schema
my_schema_2 <- schema(
  purrr::map(names(lakers), ~ {
    # 针对每个字段判断类型:数值型用double,字符型用string
    col_type <- if (is.numeric(lakers[[.x]])) double() else string()
    Field$create(name = .x, type = col_type)
  })
)

arrow_data_2 <- arrow::open_csv_dataset('sample.csv', schema = my_schema_2, skip = 1)
arrow_data_2 %>% as.data.frame()

关键说明

  • 按names(lakers)的顺序遍历字段,确保Schema的字段顺序和sample.csv的列顺序完全一致
  • 对每个字段单独判断类型,避免分组操作打乱原始顺序
  • 这样Arrow在解析CSV时,能准确将每一列映射到Schema对应的字段类型,解决读取失败的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:19:51