Apache spark 如果在拼花地板文件中发现来自S3的同一列的不同数据类型,AWS Glue作业将在红移中创建新列
我试图加载拼花地板文件,在S3到红移使用胶水作业。当我第一次运行Glue作业时,它正在创建表并加载数据,但当通过更改1列的数据类型第二次运行时,作业并没有失败,而是在红移中创建新列并追加数据 例如:这里,我正在更改整数的数据类型Apache spark 如果在拼花地板文件中发现来自S3的同一列的不同数据类型,AWS Glue作业将在红移中创建新列,apache-spark,amazon-redshift,aws-glue,pyspark-dataframes,aws-glue-data-catalog,Apache Spark,Amazon Redshift,Aws Glue,Pyspark Dataframes,Aws Glue Data Catalog,我试图加载拼花地板文件,在S3到红移使用胶水作业。当我第一次运行Glue作业时,它正在创建表并加载数据,但当通过更改1列的数据类型第二次运行时,作业并没有失败,而是在红移中创建新列并追加数据 例如:这里,我正在更改整数的数据类型 FileName **abc** Code,Name,Amount 'A','XYZ',200.00 FileName **xyz** Code,Name,Amount 'A','XYZ',200.00 红移 Output after processing both
FileName **abc**
Code,Name,Amount
'A','XYZ',200.00
FileName **xyz**
Code,Name,Amount
'A','XYZ',200.00
红移
Output after processing both the above file:
Code Name Amount Amount_String
A XYZ 200.00
A XYZ 200.00
代码
如果文件中出现数据类型不匹配问题,我希望粘合作业失败。
如果您能提供解决此问题的指导,我将不胜感激。您的爬虫程序配置设置可能会设置为第一个或第二个选项,如下图所示: 如果您不想在S3文件结构更改时修改表,则需要编辑爬虫并设置“配置选项”以选择第三个选项“忽略更改,不更新数据目录中的表”
让我知道进展如何,如果能解决您的问题,请投票/接受。上述问题是由于Glue dynamicFrame使用的红移书写器造成的。如果输入数据的特定列中存在空记录,则使用alter table query为Redshfit中的表创建新列 要避免这种行为,请将Glue dynamicFrame转换为Spark dataframe,并将其写出为红移
val amDf = am.toDF()
amDf.write.format("com.databricks.spark.redshift")
.mode(SaveMode.Overwrite)
.option("url", JDBC_URL)
.option("dbtable", TABLE_NAME)
.option("user", USER)
.option("password", PASSWORD)
.option("aws_iam_role", IAM_ROLE)
.option("tempdir", args("TempDir"))
.save()
谢谢Swapnil,我没有使用Crawler,我直接使用Glue Job并提供S3路径和红移连接。哦。。。我的错!!我也面临同样的问题,红移是否有一些设置,我可以通过它禁用此。。。若胶接作业发现列类型不匹配,则应抛出错误。。。
val amDf = am.toDF()
amDf.write.format("com.databricks.spark.redshift")
.mode(SaveMode.Overwrite)
.option("url", JDBC_URL)
.option("dbtable", TABLE_NAME)
.option("user", USER)
.option("password", PASSWORD)
.option("aws_iam_role", IAM_ROLE)
.option("tempdir", args("TempDir"))
.save()