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

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

问题描述:

我试图从数据框的列中删除特殊字符()。从数据框的列中删除特殊字符

我的数据是这样的:

客户端ID,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)的解决方案。

需要注意以下几点,

  • 确保结果分配到一个新的变量,使用后
  • 你并不需要在命令逃脱“A”与\
  • colName应该ClientIdPatientID

如果你做所有这些事情的话,我会建议,而不是匹配的上“å”,尝试匹配你想保留的角色。例如,为ClientID列,

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

另一种方法是将UTF-8字符“A”转换成它的ISO-8859-1相当于并将得到的字符串替换。

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

感谢您的回答。我无法从数据中删除所有特殊字符。数据中有几列像®这些特殊字符中的一些具有含义。我没有说明要保留什么和要删除什么的子集。这个要求是为了从特定列中删除给定的特殊字符。 – abhiadh

+0

@abhiadh'使用ISO-8859-1(带scala)时,regexp_replace(df.col(“ClientID”),“?¥”,“”)'似乎适用于我。 – Shaido

+1

是的,确实有效。在传递给函数之前,我转换了特殊字符“å”并且它工作正常。 'new String(“å”.getBytes(“UTF-8”),“ISO-8859-1”);' 谢谢 – abhiadh