如何用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
相关产品推荐
相关产品推荐

