2015-05-25 10 views
16

Uruchamiając „pakiet SBT” z linii poleceń za niewielką Spark aplikacji Scala, dostaję „wartość $ nie jest członkiem StringContext” błąd kompilacji na następnej linii kodu:

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

Intellij 13.1 podaje mi ten sam komunikat o błędzie. Ten sam kod źródłowy .scala jest kompilowany bez żadnego problemu w Eclipse 4.4.2. A także działa dobrze z mavenem w oddzielnym projekcie maven z linii poleceń.

Wygląda na to, że sbt nie rozpoznaje znaku $, ponieważ brakuje mi wtyczki w pliku project/plugins.sbt lub jakiegoś ustawienia w pliku build.sbt.

Czy znasz ten problem? Wszelkie wskazówki zostaną docenione. Mogę dostarczyć build.sbt i/lub projektu/plugins.sbt jeśli to konieczne.

+0

Prawdopodobnie pomógłbyś opisać, co twoim zdaniem "$" robi. Czy masz specjalny import? Czy korzystasz z wtyczek? Wiem, że już wspomniałeś o wtyczkach, ale jeśli już podejrzewasz, dlaczego nie udostępniłeś używanych wtyczek? –

Odpowiedz

50

Musisz upewnić się import sqlContext.implicits._

ten dostaje implicit class StringToColumn extends AnyRef

Który skomentował:

Przekształca $ "Nazwa col" w kolumnie.

2

Wielkie faceci odpowiedź, jeśli rozwiązanie import jest problemem, to będzie to praca

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

W Spark 2.0+

$ -notation dla kolumn mogą być wykorzystywane przez importowanie na niejawny SparkSession obiekt (spark)

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

import spark.implicits._ 

to twój kod z $ notation

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