如何在基于数据集和数据帧的联接命令中指定倾斜提示

使用 或 对象执行命令时,如果发现查询因数据倾斜而停滞在少量任务上,可以使用 方法指定倾斜 joinDataFrameDatasetjoinhint("skew") 提示 df.hint("skew") :。 对 指定提示 执行倾斜联接 skew 优化。

除了基本提示外,还可以指定具有以下参数组合的 hint 方法:列名、列名列表以及列名和倾斜值。

  • DataFrame 和列名。 倾斜联接优化将在 DataFrame 的指定列上执行。

    df.hint("skew", "col1")
    
  • DataFrame 和多个列。 倾斜联接优化将对 DataFrame 中的多个列执行。

    df.hint("skew", ["col1","col2"])
    
  • DataFrame、列名和倾斜值。 倾斜联接优化将对具有倾斜值的列中的数据执行。

    df.hint("skew", "col1", "value")
    

示例

此示例演示了如何为 join 操作中涉及的多个 DataFrame 对象指定倾斜提示:

val joinResults = ds1.hint("skew").as("L").join(ds2.hint("skew").as("R"), $"L.col1" === $"R.col1")