zoukankan      html  css  js  c++  java
  • 记录Spark 笛卡尔积问题

    因为要上线一个需求,有改到spark sql。 在改之前我一般习惯把生产原逻辑跑一边理解下(需求赶,都是边读业务边写)

    但奇怪的是,在生产上已经跑了24个账期的代码,拉到自己环境跑却报了 两者的版本都是2.X

    Detected cartesian product for INNER join between logical plans的错误。

    这个错误很明显,笛卡尔积。

    国内所有的解决方案都是抄袭的 

    设置 配置 spark.conf.set("spark.sql.crossJoin.enabled", "true") 这个在2.X是默认关闭的。

    但是!我去生产上spark.conf.get("spark.sql.crossJoin.enabled") 一下,得到的结果是false, 说明生产上也是没开启的。而且开启这个在许多情况下是不建议的,极度消耗性能。

    于是我就跑去外面问问老外是怎么解决了。

     很显然,这位老兄遇到了和我同样的问题。

     REPORT_X 都是列仅包含单个值,优化器此时无法推断连接列仅包含单个值,并将尝试应用散列或排序合并连接。

    说明正常情况下,这串代码理应报笛卡尔积连接问题。但是为什么生产上没有呢。

    我就想到了是否是版本问题。结果一查!正是!

    刚好因为版本的问题,虽然在1.X默认开启,2.X默认关闭,但是2.X之间似乎还说会有细微的差别。 

    至此,问题解决。暂定是版本问题。 

  • 相关阅读:
    脚本——基础命令
    ELK 安装
    keepalived+lvs
    zabbix安装
    lnmp
    nagios安装
    nginx-tomcat动静分离
    课时五、boost与adaboost
    课时四、决策树和随机森林
    课时三、回归实践
  • 原文地址:https://www.cnblogs.com/cndou/p/14430579.html
Copyright © 2011-2022 走看看