Python Pyspark动态框架无理由添加额外的空白列

Python Pyspark动态框架无理由添加额外的空白列,python,amazon-web-services,pyspark,aws-glue,Python,Amazon Web Services,Pyspark,Aws Glue,每当我加载文件并打印模式时,它都会显示一组标有col4-col89的空白列(您的数字可能会有所不同),当我写入csv时,它会显示额外的空白列 我的代码示例: %pyspark import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import Glue

每当我加载文件并打印模式时,它都会显示一组标有col4-col89的空白列(您的数字可能会有所不同),当我写入csv时,它会显示额外的空白列

我的代码示例:

%pyspark
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql import SparkSession

glueContext = GlueContext(SparkContext.getOrCreate())

def changeSex(rec):
    if rec["sex"] == "m" or rec["sex"] == "M":
        rec["sex"] = "Male"
    elif rec["sex"] == "f" or rec["sex"] == "F":
        rec["sex"] = "Female"
    else:
        rec["sex"] = "Unknown"
    return rec

output_path = "s3://my-bucket/outputs/test"
print("Data schema before maps")
df = glueContext.create_dynamic_frame.from_catalog(
       database = "my-db",
       table_name = "my_bucket")
df.printSchema()
connection_options = {"path": output_path}
new =  Map.apply(frame = df, f = combineNames)
new.printSchema()
print("Data schema after maps")
new.write(connection_type="s3",connection_options=connection_options, format="csv")
我的输出的截断版本如下所示:

Data schema before maps
root
|-- first: string
|-- last: string
|-- sex: string
|-- col4: string
|-- col5: string
|-- col6: string
|-- col7: string
|-- col8: string
即使我的表中的模式只有4列。为什么会发生这种情况?我如何清理

这也是一个稍微相关的额外问题。当我写入s3时,它会生成3个文件,它们的文件名我无法控制。有没有办法控制文件名(我只能设置路径,然后像my bucket/outputs/output.csv那样创建一个名为“output.csv”的文件夹)关于奖金问题:

df = new.toDF()
df.coalesce(1).write.format('csv').save('s3://my-bucket/outputs/test/output.csv')

关于原始问题:
create\u dynamic\u frame.from\u catalog
很好用。我需要更多的细节来理解这个问题。您能否共享glue目录中的表模式以及创建它的方式?我打赌Glue Catalog本身有所有空白列。

请同时添加您的表架构和源文件数据。同时避免在数据库或表名中使用连字符(-),因为Athena不支持连字符(-),因此您也无法验证Athena上的数据。