python – PySpark如何读取具有多个编码的字符串的文件

我正在编写一个 python spark实用程序来读取文件并进行一些转换.
文件有大量数据(最大12GB).我使用sc.textFile来创建RDD,逻辑是将每行从RDD传递给map函数,map函数依次将行拆分为“,”并运行一些数据转换(根据映射更改字段值).

Sample line from the file.
0014164,02,031270,09,1,0000000000,134314,Mobile,ce87862158eb0dff3023e16850f0417a-cs31,584e2cd63057b7ed,Privé,Gossip

由于值“Privé”,我得到UnicodeDecodeError.我试着跟随解析这个值:

if isinstance(v[12],basestring):
            v[12] = v[12].encode('utf8')
        else:
            v[12] = unicode(v[12]).encode('utf8')

但是当我将数据写回文件时,这个字段被翻译为’Priv�’.
在Linux源文件类型显示为“ISO-8859文本,具有很长的行,与CRLF行终止符”.

有人可以让我知道在Spark中使用混合编码来读/写文件的正确方法.

解决方法

调用textFile时,可以将use_unicode设置为False.它将为您提供str对象(Python 2.x)或字节对象(Python 3.x)的RDD,可以使用所需的编码进一步处理,例如

sc.textFile(path,use_unicode=False).map(lambda x: x.decode("iso-8859-1"))

如果没有足够的数据可以使用binaryFiles按原样加载

sc.binaryFiles(path).values().flatMap(lambda x: x.decode("iso-8859-1").splitlines())

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...