大数据,小 tibble
在上一个练习中,您把数据复制到 Spark 时,copy_to() 返回了一个值。这个返回值是一种特殊的 tibble(),它本身并不包含任何数据。要解释这一点,您需要先了解 tidyverse 包存储数据的方式。Tibble 通常只是 data.frame 的一种变体,打印方式更友好。然而,dplyr 也允许它们指向远程数据源的数据,例如数据库,或者——就像这里——Spark。对于远程数据集,tibble 对象只是存储到远程数据的连接。后面会更详细地讨论这一点,但现在重要的是:即使数据集很大,tibble 对象本身的大小也很小。
在 Spark 端,数据存储在名为 DataFrame 的变量中。这与 R 的 data.frame 变量类型大致等价。(不过列的类型命名略有不同——例如 numeric 列在这里称为 DoubleType 列。)在整门课程中,除非需要在 data.frame 和 DataFrame 之间加以区分,一般会使用"data frame"这一术语。由于这些类型也类似于数据库表,有时也会用"表"来描述这种矩形数据。
使用带有 Spark 连接和 Spark 数据帧名称字符串的 tbl() 将返回与您使用 copy_to() 时相同的 tibble 对象。
本练习中您将看到一个很有用的工具:pryr 包中的 object_size() 函数。它可以显示某个对象占用了多少内存。
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
已为您创建名为 spark_conn 的 Spark 连接。包含 1,000 条曲目元数据的表 "track_metadata" 已存储在 Spark 集群中。
- 使用
tbl()连接到"track_metadata"表。将结果赋值给track_metadata_tbl。 - 在
track_metadata_tbl上使用dim()查看数据集有多大。 - 在
track_metadata_tbl上使用object_size()查看 tibble 有多小。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Link to the track_metadata table in Spark
track_metadata_tbl <- ___(___, "___")
# See how big the dataset is
___(___)
# See how small the tibble is
___(___)