![](/img/trans.png)
[英]Why does spark-submit in YARN cluster mode not find python packages on executors?
[英]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.