代码之家  ›  专栏  ›  技术社区  ›  Sinan Erdem

数据集不平衡时的连接优化

  •  0
  • Sinan Erdem  · 技术社区  · 7 年前

    数据集A:~10000个拼花地板文件,每个300 KB

    数据集B:~50000个拼花地板文件,每个30 MB

    我想连接两个数据集中通用的字符串列,比如“name”。

    一件重要的事情是数据集A中的每一行在数据集B中都有一个匹配项。但是数据集B包含许多其他行。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Steven    7 年前

    bucketize 否则,还需要一个写入步骤才能使用bucketing。

    df_A.write.format('parquet')
    ...     .bucketBy(10, 'name')
    ...     .mode("overwrite")
    ...     .saveAsTable('bucketed_table_A'))
    
    df_B.write.format('parquet')
    ...     .bucketBy(10, 'name')
    ...     .mode("overwrite")
    ...     .saveAsTable('bucketed_table_B'))
    

    dataframa_A和datafram_B应具有相同数量的存储桶。桶数的选择是一项困难的“艺术”,取决于您的数据和配置。

    然后,您读取bucketized数据,并在“name”上加入它们。

    spark.table('bucketed_table_A').join(
        spark.table('bucketed_table_B'),
        on='name',
        how='left'
    )
    

    推荐文章