AWS Glue: java.lang.Исключение UnsupportedOperationException: источник данных CSV не поддерживает двоичный тип данных

#apache-spark #pyspark #databricks #aws-glue

#apache-spark #pyspark #databricks #aws-glue

Вопрос:

Я пытаюсь реализовать upsert с aws glue и databricks с помощью preactions и postactions , вот код ниже

 sample_dataframe.write.format("com.databricks.spark.redshift")
  .option("url", "jdbc:redshift://staging-db.asdf.ap-southeast-1.redshift.amazonaws.com:5439/stagingdb?user=sampleamp;password=pwd")
  .option("preactions", PRE_ACTION)
  .option("postactions", POST_ACTION)
  .option("dbtable", temporary_table)
  .option("extracopyoptions", "region 'ap-southeast-1'")
  .option("aws_iam_role", "arn:aws:iam::1234:role/AWSService-Role-ForRedshift-etl-s3")
  .option("tempdir", args["TempDir"])
  .mode("append")
  .save()
  

Я получаю следующую ошибку

 py4j.protocol.Py4JJavaError: An error occurred while calling o90.save.
: java.lang.UnsupportedOperationException: CSV data source does not support binary data type.
at org.apache.spark.sql.execution.datasources.csv.CSVUtils$.org$apache$spark$sql$execution$datasources$csv$CSVUtils$$verifyType$1(CSVUtils.scala:127)
at org.apache.spark.sql.execution.datasources.csv.CSVUtils$$anonfun$verifySchema$1.apply(CSVUtils.scala:131)
at org.apache.spark.sql.execution.datasources.csv.CSVUtils$$anonfun$verifySchema$1.apply(CSVUtils.scala:131)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
  

Возможно, я что-то пропустил. Пожалуйста, помогите TIA.

Я также пробовал передавать preactions и postactions как connection_options (ниже), и это тоже, похоже, не работает

 redshift_datasink = glueContext.write_dynamic_frame_from_jdbc_conf(frame = sample_dyn_frame, catalog_connection='Staging' , connection_options = connect_options, redshift_tmp_dir = args["TempDir"], transformation_ctx = "redshift_datasink")
  

Комментарии:

1. Какова ваша схема sample_dataframe ?

2. root |-- city: string (nullable = true) |-- updated_at: timestamp (nullable = true) |-- updated_by: string (nullable = true) |-- created_at: timestamp (nullable = true) |-- deleted: boolean (nullable = true) |-- id: long (nullable = true) |-- region: string (nullable = true) |-- name: string (nullable = true) |-- created_by: string (nullable = true) Некоторые поля имеют значение null, не уверен, что это из-за этого.