Apache spark 来自红移tempDir转储的Spark DataFrameReader

Apache spark 来自红移tempDir转储的Spark DataFrameReader,apache-spark,apache-spark-sql,amazon-redshift,databricks,Apache Spark,Apache Spark Sql,Amazon Redshift,Databricks,有没有办法从红移的tempDir转储创建数据帧 我的用例是,当一个作业失败时,我想重试,但继续从转储到S3的临时数据转储,而不是从庞大的红移重新获取数据集 加载代码会执行此操作 val df1 = spark.read .format("com.databricks.spark.redshift") .option("url", jdbcUrl) .option("dbtable", spmeTable) .option("tempdir", tempDir) .option

有没有办法从红移的tempDir转储创建数据帧

我的用例是,当一个作业失败时,我想重试,但继续从转储到S3的临时数据转储,而不是从庞大的红移重新获取数据集

加载代码会执行此操作

val df1 = spark.read
  .format("com.databricks.spark.redshift")
  .option("url", jdbcUrl)
  .option("dbtable", spmeTable)
  .option("tempdir", tempDir)
  .option("user", jdbcUsername)
  .option("password", jdbcPassword)
  .option("forward_spark_s3_credentials", true)
  .load();
稍后作业失败,但我想重新创建df1,而不从RedShift再次获取任何内容

有办法做到这一点吗

在SparkSession下找到名为
createDataFrame
的方法,不确定这是否是可能的解决方案。。。

更新#1

temp dir看起来像这里的目录结构

我从S3打开了一个临时文件,它是管道分隔的

edd66540-fa17-599b-9b22-7df29a5f9229|kNOCugU4wuKAUw7m2UXS7MfX|2018-11-27 19:48:44|POST|f|@NULL@|@NULL@|@NULL@|@NULL@|https://www.example.com/r/conversations/0grt6540-
更新#2

据此,

将文件写入S3后,将使用自定义InputFormat(com.databricks.spark.redshift.RedshiftInputFormat)并行使用这些文件。该类类似于Hadoop的标准TextInputFormat类,其中键是文件中每行开头的字节偏移量。然而,value类的类型是Array[String](与TextInputFormat不同,TextInputFormat的类型是Text)。通过使用默认分隔符(|)拆分行来创建值。RedshiftInputFormat逐行处理S3文件以生成RDD。然后在此RDD上应用前面获得的模式,将字符串转换为适当的数据类型并生成数据帧


除了跳过卸载,你知道怎么做吗?

连接器默认情况下以avro格式转储数据() 还要注意,连接器不会自动清理临时位置() 我们可以通过指向
tempdir

val df = spark.read.format("avro").load(tempdir)

我尝试了这个,得到了
java.io.FileNotFoundException:没有找到Avro文件。如果文件没有.avro扩展名,请将ignoreExtension设置为true
,我打开了一个临时文件,它看起来像一个以管道分隔的文件format@AssafMoldavsky这最终对你有用吗?