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

如何用R的arrow包读取JSON文件中的嵌套子列?

解决arrow包读取换行分隔JSON时提取嵌套子字段的问题

在使用arrow包的read_json_arrow读取嵌套JSON时,直接用"yo.param1"这种点分隔字符串无法识别嵌套字段,需要使用结构化的字段引用语法来指定嵌套子参数,以下是可行方案:

方案1:读取时直接指定嵌套字段(推荐)

通过col_select参数配合yo$param1的语法,直接在读取阶段提取所需的嵌套子字段,同时可保留顶层字段或重命名嵌套字段,避免加载整个冗余的嵌套结构:

suppressMessages(library(arrow))
suppressMessages(library(data.table))

# 生成测试文件
tf <- tempfile()
on.exit(unlink(tf))
writeLines('
    { "hello": 3.5, "world": false, "yo":{"param1":"duck1","param2":"duck2"} }
    { "hello": 3.25, "world": null, "yo":{"param1":"duck3","param2":"duck4"} }
    { "hello": 0.0, "world": true, "yo":{"param1":"duck5","param2":"duck6"} }
  ', tf, useBytes = TRUE)

# 读取指定字段:保留顶层hello、world,提取yo下的param1并自定义列名
df <- read_json_arrow(
  tf,
  col_select = c(hello, world, my_param1 = yo$param1)
)

# 查看结果
print(df)

运行后输出结果:

# A tibble: 3 × 3
  hello world my_param1
  <dbl> <lgl> <chr>    
1  3.5  FALSE duck1    
2  3.25 NA    duck3    
3  0    TRUE  duck5    

如果只需要嵌套子字段,可简化为:

df <- read_json_arrow(tf, col_select = yo$param1)

方案2:读取后提取嵌套字段(适合需后续处理场景)

如果需要先读取完整JSON再做处理,可利用arrow的数组操作或dplyr提取嵌套字段:

# 先读取完整数据
df_full <- read_json_arrow(tf)
# 提取yo下的param1列
df_extract <- df_full %>% 
  mutate(my_param1 = yo$param1) %>% 
  select(hello, world, my_param1)

关键说明

  • col_select的字符串参数仅识别顶层列名,嵌套字段必须用$语法直接引用子字段
  • 方案1在读取阶段过滤字段,内存效率更高,适合大文件场景

内容的提问来源于stack exchange,提问作者Mike.Gahan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:35:24