代码之家  ›  专栏  ›  技术社区  ›  Raphael Roth

如何在IntelliJ调试器求值表达式中使用sparks隐式转换(例如$)

  •  0
  • Raphael Roth  · 技术社区  · 5 年前

    使用IntelliJ调试Spark/Scala代码时,使用例如。 df.select($"mycol") 在求值表达式窗口中不起作用,而 df.select(col("mycol")) 工作正常(但需要更改代码):

    enter image description here

    上面写着:

    生成代码调用时出错: com.intellij.debugger.engine.evaluation。EvaluateException:评估方法时出错:“invoke”:方法抛出“java.lang.NoSuchFieldError”异常。:评估方法时出错:“invoke”:方法抛出“java.lang.NoSuchFieldError”异常。

    奇怪的是,它有时似乎有效,尤其是如果 $ 已经是我标记要计算的代码中现有表达式的一部分。如果我编写任意表达式(代码片段),它总是会失败

    编辑:甚至重复 import spark.implicts._ 在代码片段窗口中没有帮助

    0 回复  |  直到 5 年前
        1
  •  3
  •   Dean Xu    5 年前

    尝试以下解决方法:

    import spark.implicits._
    $""
    df.select($"diff").show()
    

    before

    after

        2
  •  0
  •   Raphael Roth    5 年前

    看来是 import spark.implicits.StringToColumn 在代码片段的顶部工作

    enter image description here

    enter image description here

    我认为原因是IntelliJ没有意识到首先使用了隐含的导入(它被渲染为灰色),因此它在 评估表达式 上下文

        3
  •  0
  •   Qnob    4 年前

    由于“求值表达式”对话框中缺少spark实例,我遇到了类似的NoSuchFieldError问题。请参阅下面的示例。

    class MyClass(implicit spark: SparkSession) {
    
      import spark.implicits._
    
    
      def myFunc1() = {
        // breakpoint here
      }
        
    

    我的解决方法是修改构造函数中的spark实例声明。我把“隐性火花”改为“隐性价值火花”。 ..它工作:)

    推荐文章