是否可以使用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编写速度也慢了很多
测试 | 经过的复制 | 相对用户.自身 | >系统.自身user.child | ||
---|---|---|---|---|---|
箭头::write_csv_arrow | |||||
写入.csv | 10 | 0.054 | 1.862 | 0.051 | >0.004 | 0
逐行json | 10 | 5.056 | 174.345 | 5.0014 | >td>0.0400
目前无法用R包(或底层C++实现(实现这一点。这个项目有一张门票,上面提到了这一点,但还没有完成。我在上面添加了一条评论,强调这将是有用的。
与此同时,如果你告诉我们更多关于你的代码和数据(有多少行/列等,你用来写它的代码(,我们可以看看我们是否可以做些什么来帮助它提高效率。