未检测到 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 原始列标题,而是通过使用自定义分类器修复你的数据导入/模式检测。
我正在尝试 运行 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 原始列标题,而是通过使用自定义分类器修复你的数据导入/模式检测。