Как я могу выполнить «объединение» на нескольких структурированных потоковых кадрах данных spark?

#pyspark #apache-kafka-streams #spark-structured-streaming

Вопрос:

Я хотел бы выполнить union операцию над несколькими структурированными потоковыми кадрами данных, связанными с темами кафки, чтобы отметить их все водяными знаками в один и тот же момент.

Например:

 df1=socket_streamer(spark,topic1) df2=socket_streamer(spark,topic2)  

где spark=sparksession и socket_streamer = spark.readstream

тогда я сделаю:

 Dataframe=df1.union(df2) Dataframe=Dataframe.withWatermark("timestamp","5 minutes")  

затем я пытаюсь записать фрейм данных потока.

Проблема union в том, что отображаются только первые df полученные строки.

У вас есть какие-либо идеи, как получить все мои данные, полученные союзом, или как я могу применить один и тот же водяной знак к нескольким кадрам данных ?

Танк тебе !

Ответ №1:

Имеют ли df1 и df2 одинаковую структуру? Функция объединения в spark разрешает столбцы по позиции (не по имени).

Чтобы объединить по имени, используйте:

 df1.unionByName(df2, allowMissingColumns=True)  

(доступно в Spark 3.1.X)