问题描述
我正在尝试通过使用一种热编码概念并在以下代码上使用stringindexer将SparkR中的字符串变量转换为数字: df
对SparkR中的stringindexer和Onehotencoding的正确代码有任何想法吗?
解决方法
首先,ft_string_indexer()用于sparklyr,而不用于sparkR。有关两者之间的差异,请参见here。一般来说,sparklyr更适合ML,因此,如果可以的话,我建议您改用sparklyr。
第二,值得注意的是,SparkR在其所有ML的后台都使用onehotencoder。这记为here。因此,根据模型的不同,您也许可以不做任何事情而逃脱。
我找不到与ft_string_indexer()完全相同的功能的SparkR函数,但是可以使用编码。无论您正在执行什么ML,都应保持这种状态,但是如果没有示例,我不确定。以下摘自SparkR documentation on encode:
df <- createDataFrame(as.data.frame(Titanic,stringsAsFactors = FALSE))
tmp <- mutate(df,s1 = encode(df$Class,"UTF-8"))
tmp2 <- mutate(tmp,s2 = base64(tmp$s1),s3 = decode(tmp$s1,"UTF-8"),s4 = soundex(tmp$Sex))