首页 > 解决方案 > SKEW 连接提示的 Spark Scala 等效项

问题描述

Spark SQL 有一个可用的倾斜提示(请参阅此处)。Spark Scala 是否有等效的提示?

示例 这是 Spark SQL 代码,其中事实表倾斜了 ProductId 列:

SELECT /*+ SKEW('viewFact', 'ProductId') */
    RevSumDivisionName, RevSumCategoryName, CloudAddOnFlag,
    SUM(ActualRevenueAmt) AS RevenueUSD, COUNT(*) AS Cnt
FROM viewFact
INNER JOIN viewPMST ON viewFact.ProductId = viewPMST.ProductId
INNER JOIN viewRsDf ON viewPMST.ProductFamilyId = viewRsDf.ProductFamilyId
INNER JOIN viewRevH ON viewRsDf.RevSumCategoryId = viewRevH.RevSumCategoryId
GROUP BY RevSumDivisionName, RevSumCategoryName, CloudAddOnFlag

Scala 中的相同连接:

inFact
   .join(inPMst, Seq("ProductId"))
   .join(inRsDf, Seq("ProductFamilyId"))
   .join(inRevH, Seq("RevSumCategoryId"))
.groupBy($"RevSumDivisionName", $"RevSumCategoryName", $"CloudAddOnFlag")
.agg(sum($"ActualRevenueAmt") as "RevenueUSD", count($"*") as "Cnt")

我只是找不到倾斜提示的语法。

标签: scalaapache-spark

解决方案


Spark SQL 有一个可用的倾斜提示

它不是。Databricks 平台有,但它是 Spark 本身不可用的专有扩展(与索引相同)。

我只是找不到倾斜提示的语法。

hint在一般情况下,查询计划提示使用可以像这样使用的方法传递

val hint: String = ???
inFact.join(inPMst.hint(hint),  Seq("ProductId")))

推荐阅读