[英]Error: Invalid: Unrecognized filesystem type in URI when loading parquet file from url using arrow package
[英]Problem when reading a parquet file with the arrow package
我刚刚开始使用箭头 package 读取/写入镶木地板文件。 我有一个 28 M x 35 的文件,我可以使用 write_parquet(data, 'file.parquet') 将此文件写入磁盘 - 大约 2.5 Gb。
但是当我尝试使用 write_arrow('file.parquet') 读取它时,我收到以下错误:
Error: IOError: Couldn't deserialize thrift: TProtocolException: Exceeded size limit
我使用的是具有 64 Gb RAM 的英特尔 Mac,所以我认为这不是 memory 问题。
实际上,我刚刚找到了一种解决方法:它是 data.table,如果我这样做:
vars = names(data)
write_parquet(data[,..vars], 'file.parquet')
我可以读取生成的镶木地板文件。 有没有人知道发生了什么?
非常感谢
会话信息():
R version 4.1.2 (2021-11-01)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Monterey 12.0.1
Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] qs_0.25.1.1 data.table_1.14.3 arrow_6.0.1
loaded via a namespace (and not attached):
[1] Rcpp_1.0.7 mvtnorm_1.1-3 lattice_0.20-45 png_0.1-7 zoo_1.8-9
[6] assertthat_0.2.1 digest_0.6.28 utf8_1.2.2 R6_2.5.1 plyr_1.8.6
[11] backports_1.4.0 stats4_4.1.2 ggplot2_3.3.5 pillar_1.6.4 rlang_0.4.12
[16] multcomp_1.4-17 rstudioapi_0.13 rpart_4.1-15 Matrix_1.3-4 checkmate_2.0.0
[21] splines_4.1.2 stringr_1.4.0 foreign_0.8-81 htmlwidgets_1.5.4 bit_4.0.4
[26] munsell_0.5.0 compiler_4.1.2 xfun_0.28 pkgconfig_2.0.3 base64enc_0.1-3
[31] libcoin_1.0-9 htmltools_0.5.2 nnet_7.3-16 tidyselect_1.1.1 tibble_3.1.6
[36] gridExtra_2.3 htmlTable_2.3.0 coin_1.4-2 Hmisc_4.6-0 codetools_0.2-18
[41] matrixStats_0.61.0 fansi_0.5.0 crayon_1.4.2 dplyr_1.0.7 MASS_7.3-54
[46] grid_4.1.2 gtable_0.3.0 lifecycle_1.0.1 DBI_1.1.1 magrittr_2.0.1
[51] scales_1.1.1 RcppParallel_5.1.4 stringi_1.7.5 latticeExtra_0.6-29 ellipsis_0.3.2
[56] generics_0.1.1 vctrs_0.3.8 stringfish_0.15.4 sandwich_3.0-1 RApiSerialize_0.1.0
[61] Formula_1.2-4 TH.data_1.1-0 RColorBrewer_1.1-2 tools_4.1.2 bit64_4.0.5
[66] glue_1.5.0 purrr_0.3.4 jpeg_0.1-9 parallel_4.1.2 fastmap_1.1.0
[71] survival_3.2-13 colorspace_2.0-2 cluster_2.1.2 knitr_1.36 modeltools_0.2-23
我不知道这是否是您的情况,但我发现箭头package(版本 8.0.0)无法很好地处理大量元数据。
如果您使用小标题,则某些列上可能有名称*。 实木复合地板试图存储它,但是当您尝试读取文件时,您会得到这个“超出大小限制”
tibble_column = df$col1
names(tibble_column)
#> [1] "name_row1" "name_row2" "name_row3"
请注意,某些 R 函数(例如predict
)可以返回命名向量,因此您可能会在不注意的情况下将这些名称添加到列中。 这并不总是一个问题,只有当您拥有庞大的数据集并且通常不止一个具有名称的列时。
您可以检查是否是这种情况: sapply(df, function(x) length(names(x))
如果您有任何大于 0 的值,那么这就是 parquet 将尝试存储的元数据。 只需为这些列设置 df$column = unname(df$column) ,您应该能够正常保存和加载文件。
PS:您也可以使用df = as.data.frame(df)
。 这将从列中删除所有名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.