我正在使用dataproc运行pyspark作业时收集指标,我无法将它们保留在谷歌存储中(仅使用python函数,而不是Spark)。
关键是我可以保存它们,并且在执行期间,我成功地阅读并修改它们,但是当作业结束时,我的google存储文件夹中没有任何内容。
是否可以持久保存python对象,或者只能使用pyspark库?
修改: 我添加了一个代码段来澄清问题
docker-compose up
答案 0 :(得分:1)
根据我以前的评论,我修改了你的例子,将Pickle对象复制到GCS:
# Python
import pandas as pd
from subprocess import call
from os.path import join
# Pyspark
from pyspark.sql import SparkSession
# Google storage filepath
filepath = 'gs://BUCKET_NAME/pickle/'
filename = 'pickle.pkl'
spark_session = SparkSession.builder.getOrCreate()
sdf = spark_session.createDataFrame([[1],[2],[3],[4],[5]], ['col'])
pdf = pd.DataFrame([1,2,3,4,5], columns=['col'])
# Save the pandas dataframe locally
pdf.to_pickle('./gsutil/' + filename )
pdf.to_pickle('./distcp/' + filename )
# Synch with bucket
call(["gsutil","-m","cp",'./gsutil/',join(filepath,filename)])
call(["hadoop","fs","-put","./distcp/","/user/test/"])
call(["hadoop","distcp","/user/test/distcp/" + filename,join(filepath,"distcp/" + filename)])
此外,请务必创建必要的文件夹(本地和HDFS)并事先替换正确的BUCKET_NAME
以使示例正常工作。