R 和 sparkplyr:为什么一个简单的查询这么慢?

问题描述 投票:0回答:1

这是我的代码。我在数据块中运行它。

library(sparklyr)
library(dplyr)
library(arrow)

sc <- spark_connect(method = "databricks")
tbl_change_db(sc, "prod")
trip_ids<-spark_read_table(sc, "signals",memory=F) %>% slice_sample(10) %>% pull(trip_identifier)

尽管我只查询了 10 个样本,但代码非常慢并且需要花费一个小时才能运行。 这是为什么?有没有办法提高性能?

谢谢!

r apache-spark sparklyr
1个回答
0
投票

您似乎正在使用

dplyr
slice_sample
函数对您的数据集进行采样,然后从那里选择一些单列。问题是 Spark 引擎不知道这一点:你的采样发生在 R 中。这意味着完整的数据集从它存储的任何地方完全读取,并完全发送到你的 R 引擎,只在那里进行二次采样。

您需要做的是在 Spark 本身中获取您的子集和列。您可以使用

select
(抓取单列)和
head
(抓取 N 行)函数:

trip_ids <- head(select(spark_read_table(sc, "signals",memory=F), trip_identifier), 10L)
© www.soinside.com 2019 - 2024. All rights reserved.