【问题标题】:How to remove unicode when reading data?读取数据时如何删除unicode?
【发布时间】:2016-04-01 11:19:32
【问题描述】:

我有以下一行 Python 代码:

trans = data.map(lambda line: line.strip().split())

生成 Unicode 字符串,例如:

u'Hello',u'word'

我想获取普通的 UTF-8 或 ASCII 字符串

'Hello','word' 

我尝试将字符串转换为 UTF-8,例如

trans = data.map(lambda line: line.strip().split().encode("utf-8"))

trans = data.map(lambda line: line.strip().split().encode('ascii','ignore'))

但这给出了一个错误:

AttributeError: 'list' object has no attribute 'encode'

谁能告诉我怎么做?

更新:

数据是 scv 文件, trans 是 RDD

【问题讨论】:

  • 为什么要避免使用 Unicode?对于大多数用例来说,它应该是首选的、合理的默认设置。这有点像XY problem
  • 我尽量避免使用 unicode 进行演示
  • @Toren 这毫无意义。您的问题表明您尝试编码为 UTF-8,这是 Unicode 的编码。听起来还是 XY 问题。

标签: python-2.7 unicode utf-8 apache-spark pyspark


【解决方案1】:

您的映射函数返回一个 unicode 列表,因此您可以使用列表推导来遍历这些并将它们转换为字符串。

trans = data.map(lambda line: [str(word) for word in line.strip().split()])

【讨论】:

    【解决方案2】:

    试试:

    ascii = data.map(str)
    

    这将通过在每个元素上运行str(element)data 中的每个元素从unicode 转换为str

    【讨论】:

    【解决方案3】:

    为什么不简单地编码和拆分:

    data = sc.textFile("README.md")
    trans = data.map(lambda x: x.encode("ascii", "ignore").split())
    trans.first()
    ## ['#', 'Apache', 'Spark']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多