sparklyr ml_kmeans 字段“功能”不存在
Posted
技术标签:
【中文标题】sparklyr ml_kmeans 字段“功能”不存在【英文标题】:sparklyr ml_kmeans Field "features" does not exist 【发布时间】:2018-05-11 06:40:09 【问题描述】:AWS EC2 Spark / Hadoop 集群。
以下 baisc K-Means sparklyr 代码适用于 Spark 2.0.1
kmeans_model <- iris_tbl %>%
select(Petal_Width, Petal_Length) %>%
ml_kmeans(centers = 3)
我已升级到 Spark 2.1.1,但出现此错误
Error: java.lang.IllegalArgumentException: Field "features" does not exist.
at org.apache.spark.sql.types.StructType$$anonfun$apply$1.apply(StructType.scala:264)
at org.apache.spark.sql.types.StructType$$anonfun$apply$1.apply(StructType.scala:264)
...
io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
我用代码做了一些测试
kmeans_model <- iris_tbl %>%
select(Petal_Width, Petal_Length) %>%
ml_kmeans(k = 3, features = c("Petal_Length", "Petal_Width"))
或
kmeans_model <- iris_tbl %>%
dplyr::select(Petal_Width, Petal_Length) %>%
ml_kmeans(centers = 3, features = c("Petal_Length", "Petal_Width"))
但仍然得到同样的错误。
【问题讨论】:
我希望features
参数能够实现向后兼容性。您可以在github.com/rstudio/sparklyr/issues/1150 跟踪问题。我们鼓励formula
接口,正如@user9019279 在下面指出的那样,因为它可以支持监督学习算法的交互。
【参考方案1】:
此代码在 Spark 2.0 中无法使用,就像在更新的版本中无法使用一样。此代码的应用不正确,与 Spark 版本无关。默认情况下ml_kmeans
(和其他ml_*
函数),期望Vector
类型列名为features
。 features
可以用来覆盖名称,应该是:
长度为一的字符向量
不使用ft_vector_assembler
的唯一方法是提供formula
:
kmeans_model <- iris_tbl %>%
ml_kmeans(formula= ~ Petal_Width + Petal_Length, k = 3)
【讨论】:
感谢您的回答!要覆盖特征列名称,实际上需要指定features_col
(对应于 Scala featuresCol
)。 features
的向后兼容性仍应受到尊重,我正在为此进行修复。
我接受了答案,但正如我在帖子开头所说的那样,代码在 Spark 2.0 中仍然有效以上是关于sparklyr ml_kmeans 字段“功能”不存在的主要内容,如果未能解决你的问题,请参考以下文章