java - 如何使用哈希码作为其值来设置索引列?

标签 java apache-spark apache-spark-sql apache-spark-ml

我正在尝试使用具有分类值(字符串值)的数据集来训练机器学习模型。然而,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/

相关文章:

java - 如何查找函数的 Java SDK 版本

java - 覆盖 java equals() 方法 - 不工作?

java - 连接互联网/WiFi 时运行代码

java - 从 Java 调用 Javascript

apache-spark - 嵌套 json 中的结构化流式传输不同模式

scala - 如何通过 Spark 数据帧使用 FASTLOAD 将数据加载到 Teradata 表中

python - Pyspark 基于具有列表或集合的多个条件的其他列创建新列

pyspark : TypeError: unsupported operand type(s) for +: 'int' and 'str'

dataframe - 逐行计算pyspark数据帧中的空数

scala - 如何根据user_id分区的其他列值计算行的差异