2016-03-02 18 views
14

Tôi đang sử dụng Spark 1.3.0Spark Avro 1.0.0. Tôi đang làm việc từ the example on the repository page. Mã sau đây hoạt động tốtBộ lọc tia lửa DataFrame trên chuỗi chứa

val df = sqlContext.read.avro("src/test/resources/episodes.avro") 
df.filter("doctor > 5").write.avro("/tmp/output") 

Nhưng nếu tôi cần xem chuỗi doctor có chứa chuỗi con không? Vì chúng ta đang viết biểu thức của chúng ta bên trong một chuỗi. Tôi phải làm gì để thực hiện "chứa"?

Trả lời

26

Bạn có thể sử dụng contains (chỉ hoạt động này với một chuỗi tùy ý):

df.filter($"foo".contains("bar")) 

like (SQL như với SQL biểu thức chính quy đơn giản whith _ phù hợp với một nhân vật độc đoán và % phù hợp với một chuỗi tùy ý):

df.filter($"foo".like("bar")) 

hoặc rlike (như với Java regular expressions):

df.filter($"foo".rlike("bar")) 

tùy theo yêu cầu của bạn. LIKERLIKE cũng hoạt động với các biểu thức SQL.

+0

là mã scala ở trên? có vẻ như scala không thích ký hiệu $. Tôi đã nhập 'import org.apache.spark.sql.functions.lit' –

+6

Scala. Để thực hiện công việc '$', bạn sẽ cần 'import sqlContext.implicits._'. Bạn cũng có thể thay thế nó bằng 'df (" foo ")' hoặc 'org.apache.spark.sql.functions.col (" foo ")'. – zero323

+0

tuyệt vời! cảm ơn rất nhiều –

Các vấn đề liên quan