Я довольно новичок в sparklyr, и я пытаюсь использовать spark_apply, чтобы использовать функцию из пакета CRAN (ChannelAttribution) в кадре данных Spark. Вывод, который я получаю с помощью spark_apply, отличается от того, что я использую в обычном режиме в кадре данных памяти.
library(sparklyr)
library(dplyr)
library(tibble)
library(ChannelAttribution)
sc <- spark_connect(master = "local")
# Define some sample paths which lead to conversion.
my_paths <- tibble(path = c("A > B > C",
"A > A",
"C > B > C",
"B > A > B > B"),
conversion = 1)
# Calculate markov conversion values normally.
ChannelAttribution::markov_model(my_paths,
var_path = "path",
var_conv = "conversion",
order = 3)
# Copy to a Spark DataFrame without repartitioning, and use spark_apply to
# calculate the markov conversion values.
my_paths %>%
sdf_copy_to(sc, ., "my_paths", repartition = 1) %>%
spark_apply(function(df) {
ChannelAttribution::markov_model(df,
var_path = "path",
var_conv = "conversion",
order = 3)
}) %>%
collect()
Первый вывод
channel_name total_conversions
A 1.5011965
B 1.4990816
C 0.9997219
Вывод spark_apply равен
channel_name total_conversions
A 1.33
B 1.33
C 1.33
Любая идея о том, почему это так, будет высоко оценена.