【问题标题】:Spark R - What is the equivalent of `factors()` in Spark R?Spark R - Spark R 中的 `factors()` 等价物是什么?
【发布时间】:2016-07-19 18:00:22
【问题描述】:

从R,我们有函数factors()。我想通过 Spark R 以并行方式使用这个函数。

我的 Spark 版本是 1.6.2,我在 documentation 中找不到等效版本。我以为我可以用地图做到这一点,但我不确定我是否理解this answer,应该有更简单的方法。

简单地说:Spark R 中factors() 的等价物是什么?

【问题讨论】:

  • this answer 有用吗?
  • 或者使用Spark的one-hot encoder创建虚拟变量
  • 我从第二个答案中了解到它指向类似地图的解决方案,但我不清楚如何在 SparkR 中实现这一点。我不确定如何让 map 函数在 SparkR 中返回 3 列。
  • OneHotEncoder 似乎是要走的路 - 从文档来看,它仅在 Scala、Java 和 Python 中可用。所以我的问题的一个解决方案是在 Scala 中准备我的数据,然后在 R 中加载它。
  • 我会说我建议切换到 rstudio 的 sparklyr 而不是 sparks sparkR。我发现它更直观、更可靠。从那里,似乎有一种方法可以注入“原始 scala”。或者只是通过 sparklyr 连接手动对变量进行一键编码

标签: r apache-spark sparkr


【解决方案1】:

没有直接的等价物。 Spark 使用双精度数字对每种类型的变量进行编码,并使用元数据来区分不同的类型。对于 ML 算法,您可以使用自动对列进行编码的公式。

【讨论】:

【解决方案2】:

有两种转换分类变量的方法 -

  1. StringIndexer():这会将字符串值转换为数字,您可以使用 IndextoString() 取回原始值。 StringIndexer 是一个 Estimator,所以我们需要使用 fit() 和 transform() 来获取转换后的值。

  2. 使用 OneHotEncoder():这会将类别转换为稀疏向量。您可以通过将 DropLast 设置为 false 来控制是否删除最后一个类别。这是一个 Transformer,因此 tranform() 就足够了。

更多详情请参考此链接: http://spark.apache.org/docs/latest/ml-features.html#stringindexer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多