簡體   English   中英

在集群中的執行器上運行 python 腳本 [Scala/Spark]

[英]Running a python script on executors in a cluster [Scala/Spark]

我有 python 腳本:

import sys

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

我在集群中的工作人員上運行它:

def run(spark: SparkSession) = {

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

  val dataRDD = sc.makeRDD(data)
  val scriptPath = getClass.getResource("test.py").getPath
  val pipeRDD = dataRDD.pipe(command = "python3 " ++ scriptPath)

  pipeRDD.foreach(println)
}

Output

你好約翰

你好林戈

你好喬治

你好保羅

我有幾個問題,請告訴我。 我可以在 python 腳本中訪問 spark session 嗎? 或者我可以在我的 python 腳本中創建一個文件並將其保存到 hdfs 文件系統嗎?

實際上,這就是我想要做的我想在 python 腳本中創建 csv 個文件,並將它們保存到 hdfs。

還有一個小問題。 是否可以向工作人員發送命令以安裝 python 個軟件包?

例如: pip 安裝 pandas

:更新。 我對 python 文件做了一些修改。

#!/usr/bin/python
# -*- coding: utf-8 -*-

#import pandas as pd
import sys
import os

for line in sys.stdin:
    with open('readme.csv', 'w') as f:
        f.write('Name,Last Name\nМихаил,Зубенко')

print(os.getcwd() + '/readme.csv')

該文件在容器內創建:

在此處輸入圖像描述

現在我有一個問題。 我如何訪問這個文件?

我可以在 python 腳本中訪問 spark session

不使用管道命令,不。

Python 腳本中的文件

對於初學者,我建議您使用 PySpark 而不是 Scala,假設您“需要”Python。

rdd = sparkContext.parallelize(["john","paul","george","ringo"])
hello = rdd.mapValues(lambda s: "hello " + s)
for s in rdd.collect():
  print(s)

創建一個文件...並將其保存到 hdfs 文件系統...

或者,您也可以從 Scala 寫入 HDFS。不太清楚為什么您需要 Python。 Scala 也可以創建/讀取 CSV 個文件。

安裝 python 包 [在工人身上]

是否有可能,是的,但是,PySpark 已經通過在spark-submit--py-files參數期間使用 ZIP/EGG 文件提供對此的支持

例如,pandas

SparkSQL DataFrames 大部分取代了對 Pandas 的需求,您應該使用它們而不是 RDD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM