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