Spark RDDをPythonにパイプすることは可能ですか?
データを計算するためにpythonライブラリが必要ですが、私のメインSpark=プロジェクトはScalaに基づいています。両方を混合する方法はありますか?またはpython同じアクセスspark context?
実際にpythonスクリプトを使用してScalaおよびSparkおよび通常のPythonスクリプト。
test.py
#!/usr/bin/python
import sys
for line in sys.stdin:
print "hello " + line
スパークシェル(スカラ)
val data = List("john","paul","george","ringo")
val dataRDD = sc.makeRDD(data)
val scriptPath = "./test.py"
val pipeRDD = dataRDD.pipe(scriptPath)
pipeRDD.foreach(println)
出力
こんにちは、ジョン
こんにちはリンゴ
こんにちはジョージ
こんにちはポール
SparkでPipeを介してPythonコードを実行できます。
Pipe()を使用すると、標準入力から各RDD要素を文字列として読み取り、スクリプトの指示に従ってその文字列を操作し、結果を標準出力に文字列として書き込むRDDの変換を書き込むことができます。
SparkContext.addFile(path)、Sparkジョブの開始時にダウンロードする各ワーカーノードのファイルのリストを追加できます。すべてのワーカーノードにスクリプトのコピーがあるので、すべてのライブラリと依存関係を、その前にすべてのワーカーノードとエグゼキューターノードにインストールする必要があります。
例:
Pythonファイル:入力データを大文字にするコード
#!/usr/bin/python
import sys
for line in sys.stdin:
print line.upper()
スパークコード:データのパイピング用
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)