【问题标题】:pyspark: Can't correctly decode ISO-8859-1 file using sc.textFilepyspark:无法使用 sc.textFile 正确解码 ISO-8859-1 文件
【发布时间】:2020-08-01 23:57:32
【问题描述】:

我需要读取一个带有 "ISO-8859-1" 的 csv 文件,但是在使用 sc.TextFile 时它没有给我一个参数/选择我的编码方法的选项。因此,我的一些字符串带有

不使用 read.csv() 因为文件有双分隔符,所以我需要做一些工作,因为 pyspark 不接受双分隔符。

正在使用的代码:

df_x = (
    spark
    .createDataFrame(
        sc.textFile(path, use_unicode=True)
        .map(lambda line: line.replace("\t", ""))
        .map(lambda line: line.split("@|"))
        , schema = config["report"]["schema"]
        )
    )

当前输出(葡萄牙语):

R. GERALDO RODRIGUES DA SILVA 112
RUA ANT�NIO GON�ALVES FILHO 91
Jos� Gon�alves Borges 391
SALDANHA MARINHO 522

预期的输出应该是:

R. GERALDO RODRIGUES DA SILVA 112
RUA ANTÔNIO GONÇALVES FILHO 91
José Gonçalves Borges 391
SALDANHA MARINHO 522

【问题讨论】:

  • Spark 不支持它:issues.apache.org/jira/browse/SPARK-1849 - 你可以尝试使用 Hadoop API 来代替
  • 之后没有编码/解码的方法吗?或者一个函数来替换这个错误解码的字符?例如,另一个 .map 函数?我试过 但这只会删除字符,不会替换或修复

标签: python encoding pyspark databricks iso-8859-1


【解决方案1】:

我找到了编码的解决方案。主要问题是 python、spark 和 scala 版本(databricks 运行时)。

根据解决方案,我们将databricks更新为python 3.7、spark 3.0和scala 2.12并编写了以下代码?

dff = (
    spark 
    .read 
    .load(
        "path"
        , encoding = "ISO-8859-1"
        , format   = 'csv'
        , sep = '@|'
        , schema = "schema"))

【讨论】:

    猜你喜欢
    • 2019-05-02
    • 2010-10-04
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多