¿Cómo insisto en HDFS con chispa?

Tengo datos particionados en el HDFS. En algún momento decido actualizarlo. El algoritmo es:

Lee los nuevos datos de un tema kafka. Encuentre nuevos nombres de partición de datos. Cargue los datos de las particiones con estos nombres que se encuentran en el HDFS. Combine los datos de HDFS con los nuevos datos. Sobrescribir particiones que ya están en el disco.

El problema es que si los nuevos datos tienen particiones que aún no existen en el disco. En ese caso no se escriben. @https: //stackoverflow.com/a/49691528/1068182 <: esta solución no escribe nuevas particiones, por ejemplo. @

La imagen de arriba describe la situación. Pensemos en el disco izquierdo como las particiones que ya están en HDFS y en el disco derecho como particiones que acabamos de recibir de Kafka.

Algunas de las particiones del disco derecho se intersecarán con las ya existentes, las otras no. Y este código:

spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
dataFrame
    .write
    .mode(SaveMode.Overwrite)
    .partitionBy("date", "key")
    .option("header", "true")
    .format(format)
    .save(path)

no puede escribir la parte azul de la imagen en el disco.

Entonces, ¿cómo resuelvo este problema? Por favor proporcione el código. Estoy buscando algo performant.

Un ejemplo para aquellos que no entienden:

Supongamos que tenemos estos datos en el HDFS:

PartitionA tiene datos "1"PartitionB tiene datos "1"

Ahora recibimos estos nuevos datos:

PartitionB tiene datos "2"PartitionC tiene datos "1"

Así, las particiones A y B están en el HDFS, y las particiones B y C son las nuevas, y dado que B está en el HDFS, lo actualizamos. Y quiero que se escriba C. Entonces el resultado final debería verse así:

PartitionA tiene datos "1"PartitionB tiene datos "2"PartitionC tiene datos "1"

Pero si uso el código de arriba, obtengo esto:

PartitionA tiene datos "1"PartitionB tiene datos "2"

Porque la nueva característicaoverwrite dynamic from spark 2.3 no puede crear PartitionC.

Actualiza: Resulta que si usa tablas de colmena en su lugar, esto funcionará. Pero si usas la chispa pura, no ... Entonces, supongo que la sobrescritura de la colmena y la sobrescritura de la chispa funcionan de manera diferente.

Respuestas a la pregunta(1)

Su respuesta a la pregunta