【发布时间】:2019-12-22 15:07:20
【问题描述】:
在尝试缩放 Spark 数据框中的列/功能时,我需要先将功能组装到列表/数组中。我正在使用 R 包 sparklyr 但这在 Scala 或 Python 中应该是相同的。
如果我尝试不组装我想要扩展的功能,我会得到:
library(sparklyr)
library(dplyr)
sc <- spark_connect(master = "local")
copy_to(sc, mtcars, "mtcars")
tbl(sc, "mtcars") %>%
ft_standard_scaler(input_col = "wt", output_col = "wt_scaled")
Error: java.lang.IllegalArgumentException: requirement failed: Column wt must be of type struct<type:tinyint,size:int,indices:array<int>,values:array<double>> but was actually double.
at scala.Predef$.require(Predef.scala:224)
但是如果我使用ft_vector_assemble()它就可以了。
tbl(sc, "mtcars") %>%
ft_vector_assembler(input_col = "wt", output_col = "wt_temp") %>%
ft_standard_scaler(input_col = "wt_temp", output_col = "wt_scaled") %>%
select(wt, wt_scaled)
#> # Source: spark<?> [?? x 2]
#> wt wt_scaled
#> <dbl> <list>
#> 1 2.62 <dbl [1]>
#> 2 2.88 <dbl [1]>
#> 3 2.32 <dbl [1]>
#> 4 3.22 <dbl [1]>
#> 5 3.44 <dbl [1]>
#> 6 3.46 <dbl [1]>
#> 7 3.57 <dbl [1]>
#> 8 3.19 <dbl [1]>
#> 9 3.15 <dbl [1]>
#> 10 3.44 <dbl [1]>
#> # … with more rows
由reprex package (v0.3.0) 于 2019-08-16 创建
首先,我必须组装该功能是否有原因?我知道当你有多个功能时需要它,但是如果你只有一个,为什么你必须这样做呢?
其次,如果我想检查或绘制缩放列的值,有没有办法在 Spark 中取消列出新列?
【问题讨论】:
-
Spark 为我们提供了许多选项来进行转换以标准化/规范化数据。我将在这里介绍 StandardScaler、Normalizer 和 MinMaxScaler。为了实现上述任何转换,我们需要将特征组装成特征向量。关于我们可以在这里使用什么的任何猜测?正确,向量汇编器!
-
但是,如果您只想扩展一个功能,这有意义吗?
-
我认为事实上是这样
标签: r apache-spark pyspark sparklyr