2017-11-03 223 views
0

我試圖從數據框的列中刪除特殊字符()。從數據框的列中刪除特殊字符

我的數據是這樣的:

客戶端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)的解決方案。

回答

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