在sparklyr中使用compute()有什么意义?

Ste*_*eve 5 r sparklyr

在本sparklyr教程中,我遵循它,它说我可以用来compute()将前面语句的结果存储dplyr到新的 Spark 数据框中。

“代码 1”中的代码创建了一个名为“NewSparkDataframe”的新 Spark 数据框,并spark_tbl创建了一个我分配给“NewTbl”的数据框。我可以使用查看 Spark 数据框src_tbls()。这一切都在预料之中。

如果我运行“代码 2”而不使用compute()它,仍然会创建一个spark_tbl我再次分配给“NewTbl”的代码。但这一次我无法使用 Spark 查看新的 Spark 数据帧src_tbls()

spark_tbl我想知道如果 Spark 中显然没有“NewSparkDataframe”,“ NewTbl”如何能够运行代码 2?

另外,如果我仍然可以访问使用“NewTbl”compute()新创建的相同内容,那么使用还有什么意义?spark_tbl

代码1:

NewTbl <- mySparkTbl %>%
        some dplyr statements %>%
        compute("NewSparkDataframe")
src_tbls(spark_conn)
"NewSparkDataframe"
Run Code Online (Sandbox Code Playgroud)

代码2:

NewTbl <- mySparkTbl %>%
        some dplyr statements
src_tbls(spark_conn)
Run Code Online (Sandbox Code Playgroud)

小智 0

Spark 使用惰性求值,这意味着在第二种情况下您并没有真正存储或创建表。当您在情况 2 中调用 NewTbl 时,您每次调用时都会对其进行评估NewTbl

计算所做的是强制预先进行评估并将其存储在您的会话中。当您必须经常重复使用表时,这非常有用。