Spark - “sbt package” - “value $不是StringContext的成员” - 缺少Scala插件?

时间:2015-05-25 20:18:30

标签: scala apache-spark intellij-idea sbt apache-spark-sql

当从一个小型Spark Scala应用程序的命令行运行“sbt package”时,我在以下代码行中得到“value $不是StringContext的成员”编译错误:

val joined = ordered.join(empLogins, $"login" === $"username", "inner")
  .orderBy($"count".desc)
  .select("login", "count")

Intellij 13.1给了我同样的错误信息。在Eclipse 4.4.2中编译相同的.scala源代码没有任何问题。而且它也可以在命令行的单独maven项目中与maven一起使用。

看起来sbt无法识别$符号,因为我在项目/ plugins.sbt文件或build.sbt文件中的某些设置中缺少一些插件。

你熟悉这个问题吗?任何指针将不胜感激。如果需要,我可以提供build.sbt和/或project / plugins.sbt。

3 个答案:

答案 0 :(得分:52)

您需要确保import sqlContext.implicits._

这会让你implicit class StringToColumn extends AnyRef

评论为:

  

将$“col name”转换为列。

答案 1 :(得分:14)

在Spark 2.0 +

$ - 列表示法可以通过导入隐含在SparkSession对象(spark)上来使用

val spark = org.apache.spark.sql.SparkSession.builder
        .master("local")
        .appName("App name")
        .getOrCreate;

import spark.implicits._

然后你的代码用$表示法

val joined = ordered.join(empLogins, $"login" === $"username", "inner")
  .orderBy($"count".desc)
  .select("login", "count")

答案 2 :(得分:3)

很棒的答案人,如果解决导入是一个问题,那么这将工作

-clean
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20150204-1316
-vmargs
-Xms584m
-Xmx1024m
-XX:MaxPermSize=784m
-Dosgi.instance.area.default=@user.home/AnypointStudio/workspace