小さな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を提供できます。
確認する必要があります import sqlContext.implicits._
これでimplicit class StringToColumn extends AnyRef
これは次のようにコメントされています:
$ "col name"を列に変換します。
列の$-表記は、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")
インポートの解決が問題である場合は、この問題を解決できますか?
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"))