r-用箭头快速分隔JSON写入



是否可以使用R箭头包来编写JSON-LD?我知道有非常快速的方法来编写CSV(arrow::write_csv_arrow(和parquet,我一直在使用arrow::read_json_arrow来超快速读取非常大的分隔JSON。

但在写作时,我仍然使用writeLines,这似乎相当慢。我想知道是否有计划在箭头本身支持这一点?

感谢

更新了显示我当前代码的可复制示例。事实上,数据要大得多,JSON生成需要1个多小时:

library(data.table)
library(arrow)
library(rbenchmark)
dt <- data.table(id = 1:1000)
for (i in seq(3)) dt[[paste0("numeric",i)]] <- runif(nrow(dt))
for (i in seq(4)) dt[[paste0("symbolic",i)]] <- as.character(paste0("X",round(1000*runif(nrow(dt)))))
listToJson <- function(l) {
jsonlite::toJSON(l, auto_unbox = T, na = "null", digits = NA)
}
b <- benchmark( "row-wise json" = {
writeLines(sapply(seq(nrow(dt)), function(r) { listToJson(as.list(dt[r,])) }), "test.json")
},
"write.csv" = {
write.csv(dt, "test.csv")
},
"arrow::write_csv_arrow" = {
arrow::write_csv_arrow(dt, "test.csv")
},
replications = 10
)

结果显示,与CSV相比,即使使用write.csv:,我的JSON编写速度也慢了很多

相对>系统.自身>0>td>0.0400
测试经过的复制用户.自身user.child
箭头::write_csv_arrow
写入.csv100.0541.8620.0510.004
逐行json105.056174.3455.0014

目前无法用R包(或底层C++实现(实现这一点。这个项目有一张门票,上面提到了这一点,但还没有完成。我在上面添加了一条评论,强调这将是有用的。

与此同时,如果你告诉我们更多关于你的代码和数据(有多少行/列等,你用来写它的代码(,我们可以看看我们是否可以做些什么来帮助它提高效率。

最新更新