使用spark从csv文件中删除所有特殊字符

时间:2019-01-07 08:44:26

标签: apache-spark apache-spark-sql

如何使用Java Spark从Spark数据帧中的CSV文件中删除所有特殊字符 例如:以下是带有空格和特殊字符

的csv文件内容
"UNITED STATES CELLULAR CORP. - OKLAHOMA",WIRELESS,"US Cellular"

我需要的

UNITEDSTATESCELLULARCORPOKLAHOMA|WIRELESS|US Cellular( in lower case)

预先感谢

1 个答案:

答案 0 :(得分:0)

您应该使用String.replaceAll方法(和正则表达式)将每个不是alapha数字的字符替换为空字符串。 将此作为udf并应用于数据框中的所有列。

java代码应类似于

import org.apache.spark.sql.Column;
import static org.apache.spark.sql.functions.udf;
import org.apache.spark.sql.expressions.UserDefinedFunction;
import org.apache.spark.sql.types.DataTypes;

import java.util.Arrays;

UserDefinedFunction cleanUDF = udf(
  (String strVal) -> strVal.replaceAll("[^a-zA-Z0-9]", ""), DataTypes.StringType
);

Column newColsLst[] = Arrays.stream(df.columns())
    .map(c -> cleanUDF.apply(new Column(c)).alias(c) )
    .toArray(Column[]::new);

Dataset<Row> new_df = df.select(newColsLst);

参考:How do I call a UDF on a Spark DataFrame using JAVA?