Функция Concat_ws () в Sparklyr отсутствует - PullRequest
0 голосов
/ 12 октября 2018

Я следую учебному пособию по веб-аналитике (Adobe), где хочу построить модель цепочки Маркова.(http://datafeedtoolbox.com/attribution-theory-the-two-best-models-for-algorithmic-marketing-attribution-implemented-in-apache-spark-and-r/).

В примере они используют функцию: concat_ws (из библиотеки (sparklyr)). Но похоже, что функция не существует (после установкипакет и, вызывая библиотеку, я получаю сообщение об ошибке, что функция не существует ...).

Комментарий автора блога: concat_ws - это функция Spark SQL: https://spark.apache.org/docs/2.2.0/api/java/org/apache/spark/sql/functions.html Итак, вам нужно положиться на sparklyr, чтобы эта функция работала.

Мой вопрос: есть ли обходные пути для получения доступа к функции concat_ws ()? Я пытался:

  • Поиск на Github (https://github.com/rstudio/sparklyr), если бы я мог найти функцию (или исходный код) .. к сожалению, никакого результата ..

Какова цельfunction? Объединяет несколько столбцов входной строки вместе в один столбец строки, используя заданный разделитель.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Вы не можете найти функцию, потому что она не существует в пакете sparklyr.concat_ws - это функция Spark SQL (org.apache.spark.sql.functions.concat_ws).

sparklyr зависит от уровня перевода SQL - вызовы функций преобразуются в выражения SQL с помощью dbplyr:

> dbplyr::translate_sql(concat_ws("-", foo, bar))
<SQL> CONCAT_WS('-', "foo", "bar")

Это означает, что функция может быть применена только в контексте sparklyr:

sc <- spark_connect(master = "local[*]")
df <- copy_to(sc, tibble(x="foo", y="bar"))

df %>% mutate(xy = concat_ws("-", x, y))
# # Source: spark<?> [?? x 3]
#   x     y     xy     
# * <chr> <chr> <chr>  
# 1 foo   bar   foo-bar
0 голосов
/ 13 октября 2018

Вы можете просто использовать paste из базы R.

library(sparklyr)
library(dplyr)

config <- spark_config()
sc <- spark_connect(master = "local", config = config)

df <- as.data.frame(cbind(c("1", "2", "3"), c("a", "b", "c")))
sdf <- sdf_copy_to(sc, df, overwrite = T)

sdf %>%
  mutate(concat = paste(V1, V2, sep = "-"))
...