Spark - "sbt package" - "value $ is not a member of StringContext" - 缺少 Scala 插件?

Spark - "sbt package" - "value $ is not a member of StringContext" - Missing Scala plugin?

当从小型 Spark Scala 应用程序的命令行 运行 "sbt package" 时,我在以下代码行中收到 "value $ is not a member of 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 无法识别 $ 符号,因为我在我的 project/plugins.sbt 文件中缺少一些插件或在我的 build.sbt 文件中缺少一些设置。

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

您需要确保 import sqlContext.implicits._

这让你 implicit class StringToColumn extends AnyRef

评论为:

Converts $"col name" into an Column.

伙计们,回答得好,如果解决导入是一个问题,那么这项工作是否有效

import org.apache.spark.sql.{SparkSession, SQLContext}
val ss = SparkSession.builder().appName("test").getOrCreate()
val dataDf = ...

import ss.sqlContext.implicits._
dataDf.filter(not($"column_name1" === "condition"))

在 Spark 2.0+

$-notation for columns 可以通过导入 implicit on SparkSession object (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")