Используйте Sparklyr для объединения таблиц из двух разных баз данных.

Это мой текущий способ после вызова сеанса Sparklyr:

dbGetQuery(sparkContext, "USE DB_1")

df_1 <- tbl(sparkContext, "table_1")

dbGetQuery(sparkContext, "USE DB_2")

df_2 <- tbl(sparkContext, "table_2")

df <- df_1 %>% inner_join(df_2, by = c("col_1" = "col_2"))

nrow(df))

Ошибки, с которыми я столкнулся:

"Error: org.apache.spark.sql.AnalysisException: Table or view not found: table_1"

Я считаю, что Sparklyr не поддерживает (напрямую) объединение таблиц из двух баз данных. Мне интересно, есть ли у кого-нибудь элегантное решение этой проблемы


person x. h.    schedule 22.05.2017    source источник
comment
Вы пробовали tbl_cache(sc, name, force = TRUE)? Например: my_var ‹- tbl_cache(sc,name= hive_iris) для загрузки таблиц перед переключением схем?   -  person Tim Cederquist    schedule 05.06.2017


Ответы (1)


Вы можете указать базу данных в синтаксисе Spark SQL, переданном функции dbGetQuery, например:

df_1 <- dbGetQuery(sc, "select * from db_1.table_1")

Однако обратите внимание, что dbGetQuery собирает данные для драйвера в виде кадра данных R, поэтому вы можете выполнить соединение внутри dbGetQuery, например:

df <- dbGetQuery(sc,"select * from db_1.table_1 A inner join db_2.table_2 B where A.col_1 = B.col_2)

(Или, если ваши наборы данных действительно велики, но вы хотите агрегировать их с помощью более удобного для R API вместо Spark SQL, вы можете использовать SparkR.)

person ckred    schedule 04.04.2018