如何在 Sparklyr 中正确使用特征转换函数

Posted

技术标签:

【中文标题】如何在 Sparklyr 中正确使用特征转换函数【英文标题】:How to properly use feature transformation functions in Sparklyr 【发布时间】:2019-04-11 01:46:59 【问题描述】:

假设我想在数据集的每一列上使用ft_max_abs_scaler。这是文档中的内容:

sc <- spark_connect(master = "local")
iris_tbl <- sdf_copy_to(sc, iris, name = "iris_tbl", overwrite = TRUE)

features <- c("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width")

iris_tbl <- iris_tbl %>%
  ft_vector_assembler(input_col = features,
                      output_col = "features_temp") %>%
  ft_max_abs_scaler(input_col = "features_temp",
                     output_col = "features")

请注意,ft_vector_assembler 创建了一个新列 features_tempft_max_abs_scaler 创建了另一个新列 features。现在假设我想将向量分解成单独的列,我必须这样做:

iris_tbl <- iris_tbl %>% sdf_separate_column("features", into = features) 
# result in error because column name cannot be the same

由于没有删除列的好方法,我想知道是否有更好的方法来使用 Sparklyr 进行特征转换,而无需不断创建新列。

【问题讨论】:

叹息......事情是 - sdf_separate_column 是一种非常糟糕的想法的定义。虽然它在玩具示例上看起来很棒,但我只是没有考虑底层系统的细节,只是没有扩展,如果你想将它与其他 o.a.s.ml 工具集成,它完全没用。您也可以删除列(例如 transmute(...)select(-to_drop))。 【参考方案1】:
iris_tbl <- iris_tbl %>%
              ft_vector_assembler(input_cols = c("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width"), output_col = "features") 
iris_tbl <- iris_tbl %>% 
              sdf_separate_column("features", into = "new") 
iris_tbl

【讨论】:

如果你能解释你的答案,而不是仅仅提供代码,那会更有帮助。不清楚为什么您认为这是解决问题的好方法。

以上是关于如何在 Sparklyr 中正确使用特征转换函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中正确的使用json(转)

使用 sparklyr 在 R 中将字符串转换为逻辑字符串

在 sparklyr 中将 12 小时制转换为 24 小时制

如何使用 'sparklyr::replace.na()' 替换一列上的 NaN?

为啥 R lubridate::duration 数据类型使用 sparklyr 转换为 spark 中的字符?

将 spark 数据帧转换为 sparklyR 表“tbl_spark”