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

xwbd5t1u  于 2023-04-03  发布在  Spark
关注(0)|答案(1)|浏览(117)

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个样本,但代码运行得非常慢,需要几个小时。为什么?有没有办法提高性能?
谢谢大家!

tpgth1q7

tpgth1q71#

看起来像是使用dplyrslice_sample函数对数据集进行采样,然后从中选择某个单列。问题是Spark引擎不知道这一点:你的采样发生在R中。这意味着完整的数据集是从存储的任何地方完全读取的,并完全发送到你的R引擎,只在那里进行二次采样。
你需要做的是在Spark本身中获取你的子集和列。你可以使用select(抓取单个列)和head(抓取N行)函数来做到这一点:

trip_ids <- head(select(spark_read_table(sc, "signals",memory=F), trip_identifier), 10L)

相关问题