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

问题描述 投票:5回答:1

我正在写一个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行终止”。

可能有人让我知道星火正确的方式与混合编码为读/写文件请。

python apache-spark pyspark
1个回答
2
投票

您可以设置use_unicode调用FalsetextFile。它会给你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())
© www.soinside.com 2019 - 2024. All rights reserved.