【问题标题】:How exactly are UDFs working in SparkR?在 SparkR 中,UDF 究竟是如何工作的?
【发布时间】:2018-04-26 06:16:30
【问题描述】:

假设我定义了一个将两个数字作为输入的 R 函数:

effectifTouche <- function(audience, extrapolated){
TM = audience / 1000000
VE= extrapolated/100
TME = TM * VE
nbVis = TME / 1000000.1
return (nbVis)
}

它给了我一个分数,所以我想在 SparkR DataFrame 的两列上将它用作 udf。

它在 pyspark 中工作,我想知道 SparkR 是如何工作的。

所以我在 Sparklyr 和 SparkR 中尝试了很多东西,但我无法让这个 UDF 工作。

理想情况下,我很乐意这样做:

df %>%
dapply(df_join,
    function(p) { effectifTouche(p$audience,p$extrapolated)
})

effectifTouche 是我的 R 函数和受众,外推我的 spark DataFrame 的两列。

我很乐意为 SparkR 和 Sparklyr 两个库提供答案,因为我尝试了这两个库,并且检查了每个 github 问题,但没有成功。

非常感谢

编辑另一个棘手的用例

df %>%
   mutate(my_var = as.numeric(strptime(endHour,format="%H:%M:%S"),unit="secs"))

【问题讨论】:

    标签: r user-defined-functions sparkr sparklyr


    【解决方案1】:

    使用像这样的简单算术,您可能最好将计算推送到 Spark SQL,例如

    df %>%
      mutate(TM = audience / 1000000,
             VE = extrapolated / 100,
             TME = TM * VE,
             nbVis = TME / 1000000.1)
    

    如果您确实需要使用外部R包,如果您提供df的示例,我们可以为您提供更好的帮助。

    【讨论】:

    • 例如这个 df %>% mutate(new_var = as.numeric(strptime(endHour, format="%H:%M:%S"),unit="secs") ) 与 endHour 数据集的另一列格式类似“23:45:34”。请参阅我的编辑以更好地阅读
    猜你喜欢
    • 2023-04-01
    • 2011-06-26
    • 2021-08-15
    • 2012-06-08
    • 2011-10-11
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多