2017-11-03 2 views
0

データフレームの列から特殊文字(å)を削除しようとしています。データフレームの列から特殊文字を削除します

のように私のデータが見えます:私の元のデータが約私が必要、そこからサイズが8TBさ

のClientID、PatientID

AR0001å、DH_HL704221157198295_91

AR00022、DH_HL704221157198295_92

この特殊文字を取り除く。データをロードする

コード:

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

注目すべきいくつかのもの、

  • は新しい変数に結果を代入し、その後
  • あなたはコマンドで\
  • colNameで「A」をエスケープする必要がないことを必ず使用してくださいあなたはすべてのこれらの事をした場合ClientIdまたは

PatientIDが、その後、私は一致するのではなく、にお勧めしなければなりません"å"をクリックして、保存したい文字をマッチングしてみてください。例えば、ClientID列に対して、

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

は別のアプローチは、それがISO-8859-1と同等だとUTF-8の文字「A」を変換すると、結果の文字列に置き換えることであろう。

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

お返事ありがとうございます。データからすべての特殊文字を削除することはできません。データには、®などの特殊文字の一部が意味を持つ列はほとんどありません。私は何を保持し、何を削除するかを指示するサブセットを持っていません。特定の列から特定の特殊文字を削除する必要があります。 – abhiadh

+0

@abhiadh 'regexp_replace(df.col(" ClientID ")、"Ã¥ "、" ")は、ISO-8859-1(スカラ付)を使用しているときに機能しているようです。 – Shaido

+1

本当にうまくいきました。私は特殊文字 "å"を関数に渡す前に変換していました。 '新しい文字列("å ".getBytes(" UTF-8 ")、" ISO-8859-1 "); ' ありがとう – abhiadh

関連する問題