web-dev-qa-db-ja.com

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

小さなSpark Scalaアプリケーションの場合、コマンドラインから「sbtパッケージ」を実行すると、「値$は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でもうまく機能します。

Project/plugins.sbtファイルのプラグインまたはbuild.sbtファイルの設定がないため、sbtが$記号を認識しないようです。

この問題に精通していますか?どんなポインタでも大歓迎です。必要に応じて、build.sbtまたはproject/plugins.sbtを提供できます。

20
MiguelPeralvo

確認する必要があります import sqlContext.implicits._

これでimplicit class StringToColumn extends AnyRef

これは次のようにコメントされています:

$ "col name"を列に変換します。

52
Justin Pihony

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

インポートの解決が問題である場合は、この問題を解決できますか?

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