bounty将在6天后过期。回答此问题可获得+500声望奖励。Funkwecker希望引起更多人关注此问题。
这是我的代码我在数据库里运行
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个样本,但代码运行得非常慢,需要几个小时。为什么?有没有办法提高性能?
谢谢大家!
1条答案
按热度按时间tpgth1q71#
看起来像是使用
dplyr
的slice_sample
函数对数据集进行采样,然后从中选择某个单列。问题是Spark引擎不知道这一点:你的采样发生在R中。这意味着完整的数据集是从存储的任何地方完全读取的,并完全发送到你的R引擎,只在那里进行二次采样。你需要做的是在Spark本身中获取你的子集和列。你可以使用
select
(抓取单个列)和head
(抓取N行)函数来做到这一点: