【问题标题】:Ambigouos columns 'data' in Spark DataframeSpark Dataframe中不明确的列“数据”
【发布时间】:2017-04-24 12:26:46
【问题描述】:

我正在尝试使用 CSV 加载数据框,但出现此错误:

Reference 'data' is ambiguous

我在阅读时定义了架构,但可能是因为 CSV 中的数据包含带有逗号的描述,架构显示了 2 个新列,称为“数据”:

root
 |-- CD_SK_PRODUTO_ATG: string (nullable = true)
 |-- CD_VENDA_PRODUTO: string (nullable = true)
 |-- CD_VENDA_REFIL: string (nullable = true)
 |-- NO_PRODUTO: string (nullable = true)
 |-- ID_REFIL: string (nullable = true)
 |-- DC_RECOMENDACAO_PUBLICO: string (nullable = true)
 |-- DC_USO: string (nullable = true)
 |-- NO_LINHA_PRODUTO: string (nullable = true)
 |-- CD_CONTEXTO: string (nullable = true)
 |-- DT_ULTIMA_ATUALIZACAO: string (nullable = true)
 |-- CD_USUARIO_ATUALIZACAO: string (nullable = true)
 |-- SG_PAIS: string (nullable = true)
 |-- data: date (nullable = true)
 |-- data: date (nullable = true)

由于 2 个新列具有相同的名称,我无法对 Dataframe 执行任何操作。我尝试删除带有df.drop() 的列,仅选择带有df.select() 的几列,使用df.limit(1) 限制结果,读取时推断架构...

但错误Reference 'data' is ambiguous 仍然出现。

谁有线索?

【问题讨论】:

  • 您检查过这些字段的来源csv 文件吗?
  • CSV 有 12 列。但是当我尝试在 excel 中打开它时,我猜是因为 cmets 中有逗号,所以有几列会错位。不幸的是,生成 CSV 时我无权访问,因此我可以用双引号修复列。我正在寻找某种功能,例如“dropErrors”
  • 你不能在文本编辑器中打开它吗?
  • DROPMALFORMED 在读取 csv 文件时会忽略整个损坏的记录。
  • 我认为您可以使用 sc.textfile 将您的 csv 作为 RDD[String] 读取,然后从您的 csv 中删除错误,最终将 rdd 转换为数据帧

标签: python csv apache-spark pyspark spark-dataframe


【解决方案1】:

谢谢大家的回复!

Mehrez 的建议稍加改造就奏效了。最终版本如下所示:

product_rdd = sc.textFile(product_path).map(lambda x: x.split('","'))
results["PRODUCT_DATA"] = product_rdd.toDF(product_schema)

我不得不使用 "," 进行拆分,这不是最好的解决方案,但可以满足我的需要 :)

再次感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多