我正在尝试使用具有分类值(字符串值)的数据集来训练机器学习模型。然而,Spark 模型无法使用字符串值进行训练,因此我必须将它们转换或将它们索引为数值。但是,我发现 Spark 唯一的字符串转换器是 StringIndexer,但我发现它非常不可靠,因为它根据该字符串的频率对字符串进行索引,并且在我的测试中不能保证文件中字符串值的频率将保持不变。所以我想到使用字符串变量的哈希码作为索引它们的方法。我可以轻松地迭代行并获取字符串值列的哈希码并将它们存储在列表中。但是,我不知道如何将此列表添加到数据集中,以便能够用它来训练我的模型。列表将从顶行到底行排序,因此我试图找到一种将该列表转换为列的方法,但我认为 Spark 没有该选项。知道如何从列表中创建新列并将其附加到我的训练数据集中吗?
最佳答案
所以我发现 Spark 有一个名为 hash
的函数,它创建一个包含另一列的哈希值的 int 列。
我的问题的解决方案如下:
import org.apache.spark.sql.functions;
Column stringCol = new Column("stringValues");
trainingDF = trainingDF.withColumn("hashString", functions.hash(stringCol));
关于java - 如何使用哈希码作为其值来设置索引列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418265/