相当于SKEW连接提示的Spark Scala

时间:2018-10-18 18:46:21

标签: scala apache-spark

Spark SQL有一个倾斜提示(请参阅here)。 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")

我只是无法找到偏斜提示的语法。

1 个答案:

答案 0 :(得分:4)

  

Spark SQL具有倾斜提示

不是。 Databricks平台具有功能,但它是Spark本身无法提供的专有扩展(与索引相同)。

  

我只是无法找到偏斜提示的语法。

通常情况下,查询计划提示是通过hint方法传递的,该方法可以像这样使用

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