如何在 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_temp
,ft_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 中正确使用特征转换函数的主要内容,如果未能解决你的问题,请参考以下文章
在 sparklyr 中将 12 小时制转换为 24 小时制
如何使用 'sparklyr::replace.na()' 替换一列上的 NaN?