Apache spark 如何处理Spark结构化流媒体中的数据倾斜?

Apache spark 如何处理Spark结构化流媒体中的数据倾斜?,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我有一个带聚合的结构化流媒体应用程序,由于数据倾斜,有一些任务需要很长时间 我尝试添加salting,使用多个“groupBy”,但结构化流媒体不支持多个聚合。以下是一个例子: df = df.withColumn("salt", floor(rand() * 10)) df = df.groupBy("my_field","salt").agg(sum("num_field").as("total")) df = df.groupBy("my_field").agg(s

我有一个带聚合的结构化流媒体应用程序,由于数据倾斜,有一些任务需要很长时间

我尝试添加salting,使用多个“groupBy”,但结构化流媒体不支持多个聚合。以下是一个例子:

    df = df.withColumn("salt", floor(rand() * 10))
    df = df.groupBy("my_field","salt").agg(sum("num_field").as("total"))
    df = df.groupBy("my_field").agg(sum("total"))

正确的处理方法是什么(Spark 2.3.1)

尝试使用
Df.repartition(x)
帮助我们解决流媒体管道中的倾斜问题。感谢您的评论。是否按groupBy字段重新分区?知道为什么会有帮助吗?groupBy也是一种重新分区。您应该在groupBy之前尝试执行
重新分区。我们的数据帧在许多执行器之间发生了倾斜,通过重新分区,我们减少了数据帧中的分区数量,从而在以后的方法中减少了数据混乱。另一个值得尝试的Spark选项是
coalesce
,如果您认为您的微批处理可以放在单个执行器中,那么也可以避免混乱。