未检测到 Col 名称 - AnalysisException:无法解析 'Name' 给定的输入列 'col10'

Col names not detected - AnalysisException: Cannot resolve 'Name' given input columns 'col10'

我正在尝试 运行 pyspark 脚本中的转换函数:

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "dev", table_name = "test_csv", transformation_ctx = "datasource0")
...
dataframe = datasource0.toDF()
...
def to_long(df, by):

    # Filter dtypes and split into column names and type description
    cols, dtypes = zip(*((c, t) for (c, t) in df.dtypes if c not in by))
    # Spark SQL supports only homogeneous columns
    assert len(set(dtypes)) == 1, "All columns have to be of the same type"

    # Create and explode an array of (column_name, column_value) structs
    kvs = explode(array([
      struct(lit(c).alias("key"), col(c).alias("val")) for c in cols
    ])).alias("kvs")

    return df.select(by + [kvs]).select(by + ["kvs.key", "kvs.val"])

#to_long(df, ["A"])
....
df = to_long(dataframe, ["Name","Type"])

我的数据集如下所示:

Name   |01/01(FRI)|01/02(SAT)|
ALZA CZ|      0   |         0
CLPA CZ|      1   |         5

我想要的输出是这样的:

Name   |Type        |    Date.    |Value    |
ALZA CZ|New         | 01/01(FRI)  |     0
CLPA CZ|New         | 01/01(FRI)  |     1
ALZA CZ|Old         | 01/02(SAT)  |     1
CLPA CZ|Old         | 01/02(SAT)  |     5

然而,最后一行代码给我一个类似这样的错误:

AnalysisException: Cannot resolve 'Name' given input columns 'col10' 

当我检查时:

df.show()

我在第一行看到了 'col1'、'col2' 等,而不是实际的标签 ( ["Name","Type"] )。我应该单独删除然后添加原始列标题吗?

您的元数据 table 似乎是使用 built-in CSV 分类器配置的。如果此分类器无法检测到 header,它将调用列 col1、col2 等

你的问题出在你的 ETL 工作之前的一个阶段,所以我认为你不应该删除和 re-add 原始列标题,而是通过使用自定义分类器修复你的数据导入/模式检测。