【问题标题】:Spark Scala equivalent for SKEW join hintsSKEW 连接提示的 Spark Scala 等效项
【发布时间】:2018-10-19 03:05:14
【问题描述】:

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

示例 这是事实表倾斜 ProductId 列的 Spark SQL 代码:

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")

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

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的推荐和纠正我的假设; val hint: String = "SKEW('viewFact', 'ProductId')" 成功了;请问您想将其添加到您的答案中并声明解决方案吗?
    • 是否有任何关于如何使用提示的示例(在 databricks 平台之外)?
    猜你喜欢
    • 2020-12-25
    • 2017-04-10
    • 2017-10-26
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多