Spark SQL Dataframes - использование $ columnname в предложении соединения where работает в искровой оболочке, но не компилируется - PullRequest
1 голос
/ 06 августа 2020

Когда я даю следующий оператор Spark SQL в spark-shell, он работает нормально. Но тот же оператор выдает ошибку во время сборки, когда я пытаюсь создать файл jar с помощью sbt.

val df3=df1.join(df2).where($"columnname1" === $"columnname2")

В чем причина?

Ошибка I получаю: value $ is not a member of StringContext

Я импортирую следующее. Нужно ли мне импортировать что-нибудь еще специально для сборки?

import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.functions._

На данный момент я изменил строку следующим образом, и она отлично собирается и запускается тоже хорошо.

val df3=df1.join(df2).where(df1("columnname1") === df2("columnname2"))

Я хотел бы знать, почему предыдущий синтаксис не работает в сборке и что мне не хватает в сборке.

1 Ответ

0 голосов
/ 06 августа 2020

Не забудьте import implicits, который уже импортирован в spark-shell.

val spark = SparkSession.builder().appName("test")
  .master("local").getOrCreate()

import spark.implicits._ 

Do c:

  /**
   * Converts $"col name" into a [[Column]].
   *
   * @since 2.0.0
   */
  implicit class StringToColumn(val sc: StringContext) {
    def $(args: Any*): ColumnName = {
      new ColumnName(sc.s(args: _*))
    }
  }
...