从数据框中的列中删除特殊字符

abh*_*adh 6 java csv character-encoding apache-spark apache-spark-sql

我正在尝试从数据框中的列中删除特殊字符 ( å )。

我的数据看起来像:

ClientID,PatientID 
AR0001å,DH_HL704221157198295_91
AR00022,DH_HL704221157198295_92
Run Code Online (Sandbox Code Playgroud)

我的原始数据大小约为 8TB,我需要从中删除这个特殊字符。

加载数据的代码:

reader.option("header", true)
  .option("sep", ",")
  .option("inferSchema", false)
  .option("charset", "ISO-8859-1")
  .schema(schema)
  .csv(path)
Run Code Online (Sandbox Code Playgroud)

当我加载到数据框后,df.show()它显示:

+--------+--------------------+
|ClientID|           PatientID|
+--------+--------------------+
|AR0001Ã¥|DH_HL704221157198...|
|AR00022 |DH_HL704221157198...|
+--------+--------------------+
Run Code Online (Sandbox Code Playgroud)

我用来尝试替换这个字符的代码:

df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "\å", ""));
Run Code Online (Sandbox Code Playgroud)

但这没有用。在数据框中加载数据时,如果我将字符集更改为“UTF-8”,它就可以工作。

我无法使用当前字符集 (ISO-8859-1) 找到解决方案。

Sha*_*ica 7

有些事情需要注意,

\n\n
    \n
  • 确保将结果分配给新变量并随后使用
  • \n
  • 您不需要转义“\xc3\xa5”\\
  • \n
  • colName命令中应该是ClientIdPatientID
  • \n
\n\n

如果您做了所有这些事情,那么我建议不要匹配“\xc3\xa5”,而是尝试匹配您想要保留的字符。例如,对于ClientID列,

\n\n
df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "[^A-Z0-9_]", ""));\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

另一种方法是将 UTF-8 字符“\xc3\xa5”转换为它的 ISO-8859-1 等效字符,并替换为结果字符串。

\n\n
String escapeChar = new String("\xc3\xa5".getBytes("UTF-8"), "ISO-8859-1");\n
Run Code Online (Sandbox Code Playgroud)\n