当从一个小型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。
答案 0 :(得分:52)
您需要确保import sqlContext.implicits._
这会让你implicit class StringToColumn extends AnyRef
评论为:
将$“col name”转换为列。
答案 1 :(得分:14)
$ - 列表示法可以通过导入隐含在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