【问题标题】:AnalysisException: CSV data source does not support array<struct<AnalysisException:CSV 数据源不支持 array<struct<
【发布时间】:2021-10-31 05:28:56
【问题描述】:

我在工作,我需要立即帮助 我有一个镶木地板文件,我需要将其转换为 csv。你能帮帮我吗?

错误:

AnalysisException: CSV data source does not support array<struct<company:string,dateRange:string,description:string,location:string,title:string>> data type.

我从未使用过这种格式,所以我什至无法打印架构。对不起

printshema:

root
 |-- _id: string (nullable = true)
 |-- Locale: string (nullable = true)
 |-- workExperience: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- company: string (nullable = true)
 |    |    |-- dateRange: string (nullable = true)
 |    |    |-- description: string (nullable = true)
 |    |    |-- location: string (nullable = true)
 |    |    |-- title: string (nullable = true)

【问题讨论】:

  • 看起来 parquet 文件有一个包含结构对象数组的列。由于 csv 是一种简单的文本格式,它不支持这些复杂的类型。您应该提供 parquet 文件 (spark.read().parquet(...).printSchema()) 的架构和一些示例数据以及 csv 格式的预期输出。
  • @werner 我打印了架构

标签: apache-spark pyspark parquet


【解决方案1】:

parquet 架构可以使用explode 进行展平:

df=spark.read.parquet(...)
flattened_df = df.withColumn("tmp", F.explode("workExperience")) \
    .selectExpr("_id", "Locale", "tmp.*")
flattened_df.write.csv(...)

【讨论】:

    【解决方案2】:

    您无法将包含数组/结构类型列的数据框保存到 CSV。您需要在写入之前将列转换为字符串。

    df.withColumn('workExperience', col('workExperience').cast('string')).write.csv('path')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多