我正在写一个python火花工具来读取文件,并做一些改造。文件中有大量的数据(截至12GB)。我用sc.textFile创建RDD和逻辑是从RDD每条线传递到一个映射函数而这又分裂是由线“”和运行一些数据变换(改变字段值基于映射)。
从文件样本线。 0014164,02,031270,09,1,0,0,0000000000,134314,移动,ce87862158eb0dff3023e16850f0417a-cs31,584e2cd63057b7ed,贵宾俱乐部,绯闻
由于价值观“贵宾俱乐部”我得到的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行终止”。
可能有人让我知道星火正确的方式与混合编码为读/写文件请。
您可以设置use_unicode
调用False
时textFile
。它会给你str
对象的RDD(Python的2.x的)或bytes
对象(Python的3.x的),其可以使用所希望的编码进一步加工,例如
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())