2016-11-07 16 views
7

Tôi có truy vấn câu lệnh sql đang thực hiện một nhóm theo nhiều trường. Các bảng mà nó sử dụng cũng lớn (kích thước 4TB). Tôi đang đăng ký bảng dưới dạng bảng tạm thời. Tuy nhiên tôi không biết liệu bảng được lưu trữ hay không khi tôi đăng ký nó như một bảng tạm thời? Tôi cũng không biết liệu nó có hiệu quả hơn không nếu tôi chuyển đổi truy vấn của tôi thành hàm Scala (ví dụ: df.groupby(). Aggr() ...) thay vì có nó dưới dạng câu lệnh sql. Bất kỳ trợ giúp về điều đó?RegisterTempTable có làm cho bảng được lưu trữ không?

Trả lời

6

SQL rất có thể sẽ là nhanh nhất cho đến nay Databricks blog

Bạn đã thử để phân vùng/phân vùng lại dataframe của bạn cũng như để xem liệu nó cải thiện hiệu suất?

Về registerTempTable: nó chỉ đăng ký bảng trong ngữ cảnh tia lửa. Bạn có thể kiểm tra với giao diện người dùng.

val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc") 
test.createOrReplaceTempView("test") 
test.show() 

lưu trữ là trống

vs

val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc") 
test.createOrReplaceTempView("test").cache() 
test.show() 

enter image description here

bằng cách registerTempTable bị phản đối ở Spark 2.0 và đã được thay thế bởi

createOrReplac eTempView

0

Tôi có truy vấn câu lệnh sql đang thực hiện một nhóm theo nhiều trường. Các bảng mà nó sử dụng cũng lớn (kích thước 4TB). Tôi đang đăng ký bảng dưới dạng bảng tạm thời. Tuy nhiên tôi không biết liệu bảng được lưu trữ hay không khi tôi đăng ký nó như một bảng tạm thời?

RegisterTempTabele hoặc createOrReplaceTempView không lưu dữ liệu vào bộ nhớ hoặc đĩa, trừ khi bạn sử dụng hàm cache().

Tôi cũng không biết liệu nó có hiệu quả hơn không nếu tôi chuyển đổi truy vấn của mình thành hàm Scala (ví dụ: df.groupby(). Aggr() ...) thay vì sử dụng câu lệnh sql. Bất kỳ trợ giúp về điều đó?

Hãy nhớ các thuật ngữ sql trong truy vấn sql cuối cùng gọi hàm bên trong. vì vậy cho dù bạn sử dụng các thuật ngữ truy vấn sql hoặc các chức năng có sẵn trong mã nó không quan trọng. đó là điều tương tự.

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