2015-05-25 20 views
16

Khi chạy "gói SBT" từ dòng lệnh cho một ứng dụng Spark Scala nhỏ, tôi nhận được "giá trị $ không phải là thành viên của StringContext" lỗi biên dịch trên dòng mã sau đây:

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

Intellij 13.1 đang cho tôi thông báo lỗi tương tự. Mã nguồn .scala tương tự được biên dịch mà không có bất kỳ vấn đề nào trong Eclipse 4.4.2. Và nó cũng hoạt động tốt với maven trong một dự án maven riêng biệt từ dòng lệnh.

Có vẻ như sbt không nhận ra ký hiệu $ vì tôi thiếu một số plugin trong tệp project/plugins.sbt hoặc một số cài đặt trong tệp build.sbt của tôi.

Bạn có quen với vấn đề này không? Mọi con trỏ sẽ được đánh giá cao. Tôi có thể cung cấp build.sbt và/hoặc project/plugins.sbt nếu cần thiết.

+0

Có thể sẽ giúp ích nếu bạn mô tả bạn nghĩ gì '$'. Bạn có nhập khẩu đặc biệt không? Bạn có sử dụng plugin không? Tôi biết bạn đã đề cập đến các plugin nhưng nếu bạn đã nghi ngờ, tại sao bạn không chia sẻ các plugin đã sử dụng? –

Trả lời

50

Bạn cần phải chắc chắn rằng bạn import sqlContext.implicits._

này giúp bạn implicit class StringToColumn extends AnyRef

Đó là nhận xét như:

Chuyển đổi $ "tên col" vào một cột.

2

chàng trai trả lời Tuyệt vời, nếu giải quyết nhập khẩu là một mối quan tâm, sau đó sẽ làm việc này

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

Trong Spark 2.0+

$ -notation cho cột thể được sử dụng bằng cách nhập ngầm trên SparkSession đối tượng (spark)

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

import spark.implicits._ 

sau đó mã của bạn với ký hiệu $

val joined = ordered.join(empLogins, $"login" === $"username", "inner") 
    .orderBy($"count".desc) 
    .select("login", "count") 
Các vấn đề liên quan