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



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

我的数据如下所示:

ClientID,PatientID 
AR0001å,DH_HL704221157198295_91
AR00022,DH_HL704221157198295_92

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

加载数据的代码:

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

当我这样做时加载到数据帧后df.show()它显示:

+--------+--------------------+
|ClientID|           PatientID|
+--------+--------------------+
|AR0001Ã¥|DH_HL704221157198...|
|AR00022 |DH_HL704221157198...|
+--------+--------------------+

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

df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "å", ""));

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

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

需要注意的一些事项,

  • 确保将结果分配给一个新变量,并在之后使用它
  • 您不需要用转义"å"
  • 命令中的colNameClientIdPatientID

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

df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "[^A-Z0-9_]", ""));

另一种方法是将 UTF-8 字符"å"转换为等效的 ISO-8859-1,并替换为生成的字符串。

String escapeChar = new String("å".getBytes("UTF-8"), "ISO-8859-1");

以下命令将删除所有特殊字符,并将保留字符串中的所有小写/大写字母和所有数字:

df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "[^a-zA-Z0-9]", ""));

相关内容

  • 没有找到相关文章

最新更新