【问题标题】:Why do I need to assemble vector before scaling in Spark?为什么我需要在 Spark 中缩放之前组装矢量?
【发布时间】: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


【解决方案1】:

您应该从工程的角度来看待它。当您接受其他类型作为向量时,您必须编写一些代码来处理这些类型并在某些情况下对其进行转换。尤其是 spark 的性能优化部分必须涵盖此类场景(查看 answer 为什么向量通常是有益的)。

这将迫使 spark 机器学习算法的每个开发人员实施大量代码以涵盖大量不同的场景。当您组合所有这些代码(并将其排除在标准缩放器等机器学习算法之外)时,您会得到类似于当前向量汇编器的东西。这使标准缩放器和其他算法的代码更简洁,因为他只需要处理向量。

当然这需要你调用向量汇编器,即使你只有一个特征列,但它可以让 spark 本身的代码更简洁。

关于您的其他问题:您可以在 pyspark 中使用 udf 反汇编向量(查看 answer 以获取 pyspark 示例),但我不知道如何在 R 中执行此操作。

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2016-08-09
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多