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

时间:2017-11-03 22:33:16

标签: java csv apache-spark character-encoding apache-spark-sql

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

我的数据如下:

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"), "\å", ""));

但是这没用。如果我将charset更改为“UTF-8”,则在数据框中加载数据时可以正常工作。

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

1 个答案:

答案 0 :(得分:2)

有些事情需要注意,

  • 确保将结果分配给新变量并在之后使用
  • 您无需使用\
  • 逃避“å” 命令中的
  • colName应为ClientIdPatientID

如果你做了所有这些事情,那么我建议,不要在“å”上匹配,尝试匹配你想要保留的角色。例如,对于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");
相关问题