Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如果在拼花地板文件中发现来自S3的同一列的不同数据类型,AWS Glue作业将在红移中创建新列_Apache Spark_Amazon Redshift_Aws Glue_Pyspark Dataframes_Aws Glue Data Catalog - Fatal编程技术网

Apache spark 如果在拼花地板文件中发现来自S3的同一列的不同数据类型,AWS Glue作业将在红移中创建新列

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

我试图加载拼花地板文件,在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 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()