2015-10-06 27 views
9

Có thể để ống Spark RDD tới Python?Làm thế nào để sử dụng cả Scala và Python trong cùng một dự án Spark?

Vì tôi cần thư viện python để thực hiện một số phép tính trên dữ liệu của mình, nhưng dự án Spark chính của tôi dựa trên Scala. Có cách nào kết hợp cả hai hoặc để cho python truy cập cùng một ngữ cảnh tia lửa?

+0

tôi sẽ đề nghị viết lại mã của bạn trong PySpark nhưng không phải tất cả các thư viện Python s có thể lấy tỷ lệ. Bạn đang sử dụng thư viện Python nào? – Michal

+0

Bạn có wan kết quả của các hoạt động Spark, hoặc bạn muốn RDD thô để thao tác trong Python.Trước đây không chỉ có thể, nó phổ biến trong thế giới của Big Data. Việc viết một trình cắm thêm Python cho kết quả Spark đòi hỏi phải chú ý đến từng chi tiết, nhưng thường là một giải pháp tốt. Tìm kiếm trên Internet của bạn không bật thông tin này như thế nào? Bạn đã sử dụng cụm từ tìm kiếm nào? http://stackoverflow.com/help/how-to-ask. Vui lòng đăng API Spark của bạn và cấp độ Python bạn muốn giao tiếp với nó. – Prune

+0

Tôi muốn sử dụng [Jieba] (https://github.com/fxsjy/jieba) để xử lý văn bản, đó là thư viện phân đoạn từ tiếng Trung. Và tôi sử dụng Spark Streaming + Kafka để thu thập dữ liệu. Bây giờ vấn đề là tôi cần phải đường ống dữ liệu thô cho Python để thực hiện xử lý văn bản, sau đó gửi kết quả lại cho mã Scala khác để phân tích khác. –

Trả lời

8

Bạn thực sự có thể đường ống ra một kịch bản python sử dụng Scala và Spark và một kịch bản Python thường xuyên.

test.py

#!/usr/bin/python 

import sys 

for line in sys.stdin: 
    print "hello " + line 

spark-shell (scala)

val data = List("john","paul","george","ringo") 

val dataRDD = sc.makeRDD(data) 

val scriptPath = "./test.py" 

val pipeRDD = dataRDD.pipe(scriptPath) 

pipeRDD.foreach(println) 

Output

chào john

chào Ringo

chào george

chào paul

+0

Bạn đã bao giờ chạy mã này chưa? –

+0

Chỉ cục bộ trên máy tính xách tay của tôi, không phải trên một cụm. –

+2

Có, tôi biết phương pháp này, nhưng kịch bản python đang chạy trên thực thi, vì vậy tôi có một câu hỏi rằng nếu tôi đường ống quá nhiều dữ liệu vào kịch bản bên ngoài, công nhân sẽ sụp đổ? Ý tôi là, kịch bản Python bên ngoài không phải là tính toán song song. –

0

Nếu tôi hiểu chính xác, miễn là bạn lấy dữ liệu từ scala và chuyển nó thành RDD hoặc SparkContext thì bạn sẽ có thể sử dụng pyspark để thao tác dữ liệu bằng API Spark Python.

Ngoài ra còn có một programming guide mà bạn có thể làm theo để sử dụng các ngôn ngữ khác nhau trong vòng spark

3

Bạn có thể chạy mã Python qua ống trong Spark. Với pipe(), bạn có thể viết một phép biến đổi RDD đọc từng phần tử RDD từ đầu vào tiêu chuẩn như String, thao tác String theo lệnh script và sau đó ghi kết quả là String vào đầu ra tiêu chuẩn.

SparkContext.addFile (đường dẫn), chúng tôi có thể thêm danh sách tệp cho mỗi nút công nhân để tải xuống khi bắt đầu công việc Spark.Tất cả nút công nhân sẽ có bản sao của tập lệnh, do đó chúng tôi sẽ nhận được thao tác song song bằng đường ống. Chúng ta cần phải cài đặt tất cả các thư viện và sự phụ thuộc trước khi nó trên tất cả các nút công nhân và người thực hiện.

Ví dụ:

Python file: Mã để làm dữ liệu đầu vào thành chữ hoa

#!/usr/bin/python 
import sys 
for line in sys.stdin: 
    print line.upper() 

Spark Mã: Đối với Piping dữ liệu

val conf = new SparkConf().setAppName("Pipe") 
val sc = new SparkContext(conf) 
val distScript = "/path/on/driver/PipeScript.py" 
val distScriptName = "PipeScript.py" 
sc.addFile(distScript) 
val ipData = sc.parallelize(List("asd","xyz","zxcz","sdfsfd","Ssdfd","Sdfsf")) 
val opData = ipData.pipe(SparkFiles.get(distScriptName)) 
opData.foreach(println) 
Các vấn đề liên quan