2017-11-28 6 views
0

私はPostgreSQLに保存する必要があるSpark Dataframeを持っています。これは、エンコードしようとしているデフォルトPysparkでいるようだPostgreSQLでSpark DataframeをUTF-8エンコーディングで書く

df.write.jdbc(url=jdbc_url, table='{}.{}'.format(schema_name, table_name), mode='overwrite', properties=properties) 

:として

UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 95: ordinal not in range(128) 

私の現在の文は次のようになります。私は次のエラーを取得するので、エンコードのオプションを除き、適切なPythonの文を持っていると思いますデータフレームはASCIIであるため、正しいエンコーディング(UTF-8)を指定する必要があります。どうやってするか?

私はoption("charset", "utf-8")option("encoding", "utf-8")とインターネットで見た他の多くの組み合わせを試しました。また、jdbcに渡されたプロパティに"client_encoding":"utf8"を追加しようとしました。しかし、何も動作していないようです。

本当にありがとうございます。

追加情報:

  • のPython 2.7
  • スパーク1.6.2

EDIT 1

私のデータベースがあるUTF-8でエンコード:

$ sudo -u postgres psql db_test -c 'SHOW SERVER_ENCODING' 
server_encoding 
----------------- 
UTF8 
(1 row) 

EDIT 2

私は別のものがログに隠された、このエラーと一緒に気づい:PostgreSQLのドライバは、私が作成したい表不満た、既に作成されました!したがって、私はPostgreSQLから削除し、すべてが魅力的になった:)残念ながら、私は1つのことが他のものとどのように関連していたかを完全に理解できませんでした...おそらく、既に作成されたテーブルはASCIIエンコーディングを使用し、それらの間の非互換性の種類と保存されることを意図したデータ?

+0

この記事は、任意のヒントを与えるのでしょうか? https://stackoverflow.com/questions/9942594/unicodeencodeerror-ascii-codec-cant-encode-character-u-xa0-in-position-20 –

+0

私は2番目の編集を追加しました。私は問題が修正された説明するが、まだ方法を知らない: – frb

答えて

-1

あなたのpostgre Databseのエンコードをチェックしてみるべきです。

psql my_database -c 'SHOW SERVER_ENCODING' 

マルチバイトエンコーディングではない場合は、マルチバイトに変更する必要があります。 DBのエンコーディングを変更するためのthisスレッドを参照してください:

また、この公式ドキュメントが役に立つかもしれません: https://www.postgresql.org/docs/9.3/static/multibyte.html

+0

応答ありがとう。データベースのエンコーディングはUTF-8です(コマンドの結果を編集しました)。 – frb

-1

あなたjdbc_url URIにcharacterEncodingを指定してください:

jdbc_url = "jdbc:postgresql://127.0.0.1/mydb?characterEncoding=utf-8" 
df.write.jdbc(url=jdbc_url, table='{}.{}'.format(schema_name, table_name), mode='overwrite', properties=properties) 
関連する問題