Java中的Spark ml基本操作
Spark ml basic operation in Java
我有 Dataset <Row> dataset;
并想对其执行一些基本操作。
例如:- 假设我有 3 列 "Id","Name","Age"
和这些列的数据。我想根据 Name 列
对该数据集执行以下这些操作
[1] 从名称列
中删除白色 space
[2] 从名称列中删除数字
[3] 从名称列中删除特殊字符
我正在使用 java8、Apache-Spark 和 Apache-Spark-ml 库
请建议最好的方法。
使用regexp_replace()
替换空格、数字和特殊字符。 (基本上只保留字母)。
List<Row> rows = new ArrayList<Row>() {{
add(RowFactory.create("validName"));
add(RowFactory.create("name with whitespace "));
add(RowFactory.create("name with numbers 1234"));
add(RowFactory.create("name with special chars !@#$%"));
}};
StructField[] structFields = new StructField[]{
new StructField("Name", DataTypes.StringType, false, Metadata.empty()),
};
//create sample data
Dataset<Row> input = spark().createDataFrame(rows, new StructType(structFields));
input.withColumn("cleanedName", functions.regexp_replace(functions.col("Name"),"[^a-zA-Z]+", "")).show(100, false);
清理后的名称列具有预期值:
+-----------------------------+--------------------+
|Name |cleanedName |
+-----------------------------+--------------------+
|validName |validName |
|name with whitespace |namewithwhitespace |
|name with numbers 1234 |namewithnumbers |
|name with special chars !@#$%|namewithspecialchars|
+-----------------------------+--------------------+
我有 Dataset <Row> dataset;
并想对其执行一些基本操作。
例如:- 假设我有 3 列 "Id","Name","Age"
和这些列的数据。我想根据 Name 列
对该数据集执行以下这些操作
[1] 从名称列
中删除白色 space
[2] 从名称列中删除数字
[3] 从名称列中删除特殊字符
我正在使用 java8、Apache-Spark 和 Apache-Spark-ml 库
请建议最好的方法。
使用regexp_replace()
替换空格、数字和特殊字符。 (基本上只保留字母)。
List<Row> rows = new ArrayList<Row>() {{
add(RowFactory.create("validName"));
add(RowFactory.create("name with whitespace "));
add(RowFactory.create("name with numbers 1234"));
add(RowFactory.create("name with special chars !@#$%"));
}};
StructField[] structFields = new StructField[]{
new StructField("Name", DataTypes.StringType, false, Metadata.empty()),
};
//create sample data
Dataset<Row> input = spark().createDataFrame(rows, new StructType(structFields));
input.withColumn("cleanedName", functions.regexp_replace(functions.col("Name"),"[^a-zA-Z]+", "")).show(100, false);
清理后的名称列具有预期值:
+-----------------------------+--------------------+
|Name |cleanedName |
+-----------------------------+--------------------+
|validName |validName |
|name with whitespace |namewithwhitespace |
|name with numbers 1234 |namewithnumbers |
|name with special chars !@#$%|namewithspecialchars|
+-----------------------------+--------------------+