Spark - "sbt package" - "значение $не является членом StringContext" - отсутствует плагин Scala?

При запуске пакета "sbt" из командной строки для небольшого приложения Spark Scala я получаю ошибку компиляции "значение $не является членом StringContext" в следующей строке кода:

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

Intellij 13.1 дает мне то же сообщение об ошибке. Тот же исходный код .scala компилируется без каких-либо проблем в Eclipse 4.4.2. А также он отлично работает с maven в отдельном проекте maven из командной строки.

Похоже, что sbt не распознает знак $, потому что мне не хватает какого-либо плагина в файле project/plugins.sbt или некоторых параметров в файле build.sbt.

Вы знакомы с этой проблемой? Любые указатели будут оценены. Я могу предоставить build.sbt и/или project/plugins.sbt, если это необходимо.

Ответы

Ответ 1

Вам нужно убедиться, что вы import sqlContext.implicits._

Это дает вам implicit class StringToColumn extends AnyRef

Отмечается как:

Преобразует $col имя столбца в столбец.

Ответ 2

В Spark 2.0 +

$- обозначение для столбцов может быть использовано путем импорта неявного объекта SparkSession (spark)

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

import spark.implicits._

то ваш код с $notation

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

Ответ 3

Отличный ответ, ребята, если проблема с импортом вызывает беспокойство, тогда эта работа будет

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"))