Идеальным подходом было бы чтение всего фрейма данных как двоичного типа (Array [Byte]), а затем приведение соответствующих значений к их совместимым типам данных, однако Spark не позволяет читать тип двойных данных как двоичный тип данных. Поэтому не удалось продолжить этот подход.
Может быть взломано, чтобы установить для свойства Spark "spark. sql .files.ignoreCorruptFiles" значение true, а затем прочитать файлы с нужной схемой. Файлы, которые не соответствуют указанной схеме, игнорируются. Результирующий набор данных содержит только данные из тех файлов, которые соответствуют указанной схеме. Таким образом, прочитайте два кадра данных, один с типом данных String, а другой с типом данных Double, а затем приведите любой из них к одному типу данных, а затем, наконец, объедините их.
val stringSchema = StructType(StructField("final_height", StringType, false) :: Nil)
val doubleSchema = StructType(StructField("final_height", DoubleType, false) :: Nil)
spark.conf.set("spark.sql.files.ignoreCorruptFiles", "true")
val stringDF = spark.read.schema(stringSchema).parquet("path/")
val doubleDF = spark.read.schema(doubleSchema).parquet("path/")
//Cast to compatible type
val doubleToStringDF = doubleDF.select(col("final_height").cast(StringType))
val finalDF = stringDF.union(doubleToStringDF)