Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
hope-data-science authored Oct 10, 2024
1 parent 3a69c8d commit 5738062
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 7 deletions.
7 changes: 2 additions & 5 deletions 从内存到外存:用数据库管理数据.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -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`操作。在这个背景下,我们可以对这个没有导入环境的数据进行各种操作,并把结果收集到环境中进行展示,操作方法如下:
Expand All @@ -294,9 +294,6 @@ pst(
# 查看结果
res
# 把结果转化为R中的数据框
res$to_data_frame()
# 把结果转化为数据框并使用tibble形式进行展示
res %>% as_tibble()
```
Expand Down
3 changes: 2 additions & 1 deletion 参考资料.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
(@) [Apache Arrow R Cookbook](https://arrow.apache.org/cookbook/r/index.html)
(@) [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/)
(@) [tidypolars](https://tidypolars.etiennebacher.com/)
(@) [fastverse](https://fastverse.github.io/fastverse/)
14 changes: 14 additions & 0 deletions 快速读写:大数据的导入与导出.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -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/>



3 changes: 2 additions & 1 deletion 数据处理效能的衡量.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ mem_change(rm(a)) # 把a变量移除后,R所占内存数量的变化
```

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

## 综合衡量

Expand All @@ -79,7 +80,7 @@ mark(
)
```

以上代码利用`mark`函数对比了3个表达式的效能。
以上代码利用`mark`函数对比了3个表达式的效能。

## 小结

Expand Down

0 comments on commit 5738062

Please sign in to comment.