代码之家  ›  专栏  ›  技术社区  ›  Georg Heiler

多租户条件过滤逻辑的spark作业

  •  1
  • Georg Heiler  · 技术社区  · 7 年前

    我有一张像这样的桌子

    tenant_id,start_date,end_date,use_fancy_transformation
    1,20180101,20180201,true
    2,20180103,20180115,false
    

    以及像这样的数据帧

    tenant_id,thing,date,value
    1,1,20180105,1
    2,2,20180107,2
    1,2,20180120,2
    

    现在有一些业务逻辑应该(有条件地)执行不同的事情。最简单的情况是从第一个表导出指定日期范围的数据。显然,每个租户的日期范围是不同的。

    所以在执行时(在伪代码中) df.filter(date between(tenant2_start, tenant2_end).write.partitionBy("tenant_id", "current_date").parquet 筛选器已应用,tenant1的内容将丢失。

    我想出的可能的解决办法(没有一个能让我真正满意,都显得笨拙):

    • 不并行化配置表,然后迭代每个条目。然而,这可能需要一些相当昂贵的转换来重新运行(最好只计算一次)。
    • 另一个可能的解决方案是通过工作流运行器(如Oozie/Airflow)从外部对配置进行参数化,但是,这会触发很多作业(以防有很多租户在场)。记住代价高昂的转换。

    你看到一条优雅的出路了吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Georg Heiler    7 年前

    非eqi连接可以很好地解决问题