Unverified Commit 57380621 authored by Hope's avatar Hope Committed by GitHub
Browse files

Add files via upload

parent 3a69c8d4
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ knitr::include_graphics("fig/duckdb.png")

### 数据库的连接

事开头难,对数据库操作的第一步就是必须让R环境与数据库连接起来。在R中要与数据库连接,一般需要两个包:其一是**DBI**,这个包提供了用于数据库连接、数据传输、执行查询的通用函数;其二是针对用户连接数据库系统的定制包,这些包能够把**DBI**命令转化为特定数据库系统能够解读的命令,比如要使用SQLite就需要**RSQLite**包,使用PostgreSQL就需要使用**PostgreSQL**包。对于咱们的试验来说,需要使用**duckdb**包来完成这个操作,实现方法如下:
事开头难,对数据库操作的第一步就是必须让R环境与数据库连接起来。在R中要与数据库连接,一般需要两个包:其一是**DBI**,这个包提供了用于数据库连接、数据传输、执行查询的通用函数;其二是针对用户连接数据库系统的定制包,这些包能够把**DBI**命令转化为特定数据库系统能够解读的命令,比如要使用SQLite就需要**RSQLite**包,使用PostgreSQL就需要使用**PostgreSQL**包。对于咱们的试验来说,需要使用**duckdb**包来完成这个操作,实现方法如下:

```{r}
con = dbConnect(duckdb())
@@ -267,7 +267,7 @@ library(pacman)
p_load(polars,tidypolars,tidyverse,tidyfst)

# 扫描数据
pl$scan_parquet("df.parquet") -> dat_pl
scan_parquet_polars("temp/df.parquet") -> dat_pl
```

需要注意的是,在上面的操作中,我们并没有把数据导入到环境里面。我们用了“扫描”一词,其实相当于对数据进行了连接,类似于我们在前一章节中提到的`open_dataset`操作。在这个背景下,我们可以对这个没有导入环境的数据进行各种操作,并把结果收集到环境中进行展示,操作方法如下:
@@ -294,9 +294,6 @@ pst(
# 查看结果
res

# 把结果转化为R中的数据框
res$to_data_frame()

# 把结果转化为数据框并使用tibble形式进行展示
res %>% as_tibble()
```
+2 −0
Original line number Diff line number Diff line
@@ -9,3 +9,4 @@
(@) [R interface to Apache Spark](https://spark.posit.co/)
(@) [An Introduction to Polars from R](https://pola-rs.github.io/r-polars/vignettes/polars.html)
(@) [tidypolars](https://tidypolars.etiennebacher.com/)
(@) [fastverse](https://fastverse.github.io/fastverse/)
 No newline at end of file
+14 −0
Original line number Diff line number Diff line
@@ -233,3 +233,17 @@ res %>%
## 小结

本章聚焦于大数据的读写性能,介绍了大数据读写中需要考虑的三个要素:(1)读写速度;(2)内存占用;(3)文件格式通用性。在R平台中进行测试,发现读写速度最快的文件格式是fst,而存储效率最高的是Parquet格式,在考虑通用交流的时候则需靠考虑团队成员能够读取什么格式的文件。

## 练习

设计一个试验,对于不同体量(不应低于100M)的数据,观察读写不同数据格式的文件(包括但不限于csv、parquet、qs、fst等),需要的时间和空间分别是多少。要求使用图表进行展示,并给出明确的结论。附加考虑:当数据是不同类型的时候,上面的结论是否有所变化?

## 参考资料
- <https://rsangole.netlify.app/posts/2022-09-14_data-read-write-performance/data-read-write-perf>
- <https://tomaztsql.wordpress.com/2022/05/08/comparing-performances-of-csv-to-rds-parquet-and-feather-data-types/>
- <https://prof-thiagooliveira.netlify.app/post/data-read-write-performance/>
- <https://stackoverflow.com/questions/58699848/best-file-type-for-loading-data-in-to-r-speed-wise>
- <https://h2oai.github.io/db-benchmark/>


+1 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ mem_change(rm(a)) # 把a变量移除后,R所占内存数量的变化
```

注意,如果结果带有负号,说明R所占用内存减少了,否则就是增加了。
此外,如果对一个已经保存在本地的文件,需要查看其占用内存空间,可以使用**fs**包的`file_size`函数进行查看,只需要把文件的路径放入即可。

## 综合衡量