Python 使用UTF-8编码在PostgreSQL中写入Spark数据帧
我有一个必须保存在PostgreSQL中的Spark数据帧。我想除了编码选项之外,我还有合适的Python语句,因为我得到了以下错误:Python 使用UTF-8编码在PostgreSQL中写入Spark数据帧,python,postgresql,apache-spark,encoding,pyspark,Python,Postgresql,Apache Spark,Encoding,Pyspark,我有一个必须保存在PostgreSQL中的Spark数据帧。我想除了编码选项之外,我还有合适的Python语句,因为我得到了以下错误: UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 95: ordinal not in range(128) 我现在的句子是: df.write.jdbc(url=jdbc_url, table='{}.{}'.format(schema_name, tab
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 95: ordinal not in range(128)
我现在的句子是:
df.write.jdbc(url=jdbc_url, table='{}.{}'.format(schema_name, table_name), mode='overwrite', properties=properties)
默认情况下,Pyspark试图将数据帧编码为ASCII,因此我应该指定正确的编码(UTF-8)。怎么做
我尝试过选项(“字符集”、“utf-8”)
、选项(“编码”、“utf-8”)
以及我在互联网上看到的许多其他组合。我还尝试在传递给jdbc
的属性中添加“client\u encoding”:“utf8”
。但似乎什么都不管用
任何帮助都将不胜感激
其他信息:
- Python 2.7
- Spark 1.6.2
$ sudo -u postgres psql db_test -c 'SHOW SERVER_ENCODING'
server_encoding
-----------------
UTF8
(1 row)
编辑2
我注意到日志中隐藏了另一个错误:PostgreSQL驱动程序抱怨我要创建的表已经创建!因此,我从PostgreSQL中删除了它,一切都变得很有趣:)不幸的是,我无法完全理解一件事与另一件事之间的关系。。。可能是因为已经创建的表使用了ASCII编码,并且它与要保存的数据之间存在某种不兼容 您应该尝试检查postgre数据库的编码
psql my_database -c 'SHOW SERVER_ENCODING'
如果这不是多字节编码,那么可能需要将其更改为多字节。有关更改DB编码的信息,请参见线程:
此外,此官方文件可能会有所帮助:
谢谢您的回答。数据库的编码是UTF-8(我用命令的结果编辑了我的问题)。这篇文章有什么提示吗?我添加了第二次编辑。我解释说问题已经解决,但仍然不知道如何解决:)