2017-03-21 17 views
7

Tôi có ứng dụng Spark sử dụng API mới 2.0 Spark với SparkSession. Tôi đang xây dựng ứng dụng này trên đầu trang của một ứng dụng khác đang sử dụng SparkContext. Tôi muốn vượt qua SparkContext vào đơn đăng ký của mình và khởi tạo SparkSession bằng cách sử dụng SparkContext hiện có.Cách tạo SparkSession từ SparkContext hiện tại

Tuy nhiên, tôi không thể tìm ra cách để thực hiện điều đó. Tôi thấy rằng một nhà xây dựng SparkSession với SparkContext là riêng tư nên tôi không thể khởi tạo nó theo cách đó và người xây dựng không cung cấp bất kỳ phương thức setSparkContext nào. Bạn có nghĩ rằng có tồn tại một số cách giải quyết?

+0

Tôi không phải là rất chắc chắn nhưng theo ter kiến ​​thức của tôi là không có cách giải quyết – BDR

+0

yea :(nên Nếu không có cách giải quyết nào thì có hai lựa chọn còn lại: sử dụng SparkContext trong ứng dụng của tôi hoặc thêm hỗ trợ cho sparkSession vào ứng dụng tôi đang xây dựng ở trên cùng (đó là spark-jobserver, tôi đang sử dụng nhánh spark-2.0-preview tuy nhiên họ vẫn sử dụng sparkContext) –

+0

Bạn chỉ cần thêm hỗ trợ cho SparkContext bên ngoài vào ứng dụng và truy cập session.sparkContext. Không nên là vấn đề lớn. –

Trả lời

6

Dường như không có cách nào để khởi tạo SparkSession từ số SparkContext hiện tại.

5
public JavaSparkContext getSparkContext() 
{ 
     SparkConf conf = new SparkConf() 
        .setAppName("appName") 
        .setMaster("local[*]"); 
     JavaSparkContext jsc = new JavaSparkContext(conf); 
     return jsc; 
} 


public SparkSession getSparkSession() 
{ 
     sparkSession= new SparkSession(getSparkContext().sc()); 
     return sparkSession; 
} 


you can also try using builder 

public SparkSession getSparkSession() 
{ 
     SparkConf conf = new SparkConf() 
         .setAppName("appName") 
         .setMaster("local"); 

     SparkSession sparkSession = SparkSession 
            .builder() 
            .config(conf) 
            .getOrCreate(); 
     return sparkSession; 
} 
+0

trong phương pháp thứ hai của bạn, bạn không sử dụng bất kỳ ngữ cảnh tia lửa, trong scala tôi không thể xây dựng SparkSession như trong getSparkSession của bạn() –

6

Giống như trong ví dụ trên bạn không thể tạo vì constructor SparkSession 's là tin Thay vào đó bạn có thể tạo một SQLContext sử dụng SparkContext, và sau đó nhận được sparksession từ sqlcontext như thế này

val sqlContext=new SQLContext(sparkContext); 
val spark=sqlContext.sparkSession 

Hy vọng điều này sẽ giúp

1

Bạn sẽ nhận thấy rằng chúng tôi đang sử dụng SparkSession và SparkContext và đây không phải là lỗi. Hãy xem lại các biên niên sử của lịch sử Spark cho một quan điểm. Điều quan trọng là phải hiểu chúng tôi đến từ đâu, vì bạn sẽ nghe về những vật thể kết nối này trong một thời gian tới.

Trước Spark 2.0.0, ba đối tượng kết nối chính là SparkContext, SqlContext và HiveContext. Đối tượng SparkContext là kết nối đến môi trường thực thi Spark và tạo RDD và các ngôn ngữ khác, SQLContext đã làm việc với SparkSQL trong nền của SparkContext và HiveContext tương tác với các cửa hàng Hive.

Spark 2.0.0 giới thiệu Tập dữ liệu/DataFrames làm giao diện trừu tượng hóa dữ liệu được phân phối chính và đối tượng SparkSession làm điểm vào cho môi trường thực thi Spark. Một cách thích hợp, đối tượng SparkSession được tìm thấy trong không gian tên, org.apache.spark.sql.SparkSession (Scala), hoặc pyspark.sql.sparkSession. Một vài điểm cần lưu ý như sau:

Trong Scala và Java, Tập dữ liệu tạo thành trừu tượng dữ liệu chính dưới dạng dữ liệu đã nhập; Tuy nhiên, đối với Python và R (mà không cần phải biên dịch kiểm tra kiểu thời gian), dữ liệu ...

https://www.packtpub.com/mapt/book/big_data_and_business_intelligence/9781785889271/4/ch04lvl1sec31/sparksession-versus-sparkcontext

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