gpt4 book ai didi

python - 正确编码 sc.textFile 数据 (python 2.7)

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:28 24 4
gpt4 key购买 nike

我的 CSV 最初是由 Excel 创建的。考虑到编码异常,我使用 Sublime Text 打开并使用 UTF-8 BOM 编码 重新保存该文件。

导入笔记本:

filepath = "file:///Volumes/PASSPORT/Inserts/IMAGETRAC/csv/universe_wcsv.csv"
uverse = sc.textFile(filepath)
header = uverse.first()
data = uverse.filter(lambda x:x<>header)

格式化我的字段:

fields = header.replace(" ", "_").replace("/", "_").split(",")

结构化数据:

import csv
from StringIO import StringIO
from collections import namedtuple

Products = namedtuple("Products", fields, verbose=True)

def parse(row):
reader = csv.reader(StringIO(row))
row = reader.next()
return Products(*row)

products = data.map(parse)

如果我随后执行products.first(),我将按预期获得第一条记录。但是,如果我想查看按品牌计数,然后运行:

products.map(lambda x: x.brand).countByValue()

我仍然收到与 UnicodeEncodeError 相关的 Py4JJavaError:

File "<ipython-input-18-4cc0cb8c6fe7>", line 3, in parse
UnicodeEncodeError: 'ascii' codec can't encode character u'\xab' in
position 125: ordinal not in range(128)

如何修复此代码?

最佳答案

旧版 Python 版本中的

csv 模块不支持 Unicode 输入。我个人建议使用 Spark csv 数据源:

df = spark.read.option("header", "true").csv(filepath)
fields = [c.strip().replace(" ", "_").replace("/", "_") for c in df.columns]
df.toDF(*fields).rdd

对于大多数应用程序,Row 对象应该与 namedtuple 一样工作(它扩展了 tuple 并提供类似的属性 getter),但您可以轻松遵循将一种转换为另一种。

您也可以尝试在不解码的情况下读取数据:

uverse = sc.textFile(filepath, use_unicode=False)

初始解析后手动解码字段:

(data
.map(parse)
.map(lambda prod: Products(*[x.decode("utf-8") for x in prod])))

相关问题Reading a UTF8 CSV file with Python

关于python - 正确编码 sc.textFile 数据 (python 2.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41547429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com