从运行在dataproc中的pyspark作业将python数据对象保存到google存储中的文件

时间:2018-02-08 11:07:48

标签: python pyspark google-cloud-storage google-cloud-dataproc

我正在使用dataproc运行pyspark作业时收集指标,我无法将它们保留在谷歌存储中(仅使用python函数,而不是Spark)。

关键是我可以保存它们,并且在执行期间,我成功地阅读并修改它们,但是当作业结束时,我的google存储文件夹中没有任何内容。

是否可以持久保存python对象,或者只能使用pyspark库?

修改: 我添加了一个代码段来澄清问题

docker-compose up

1 个答案:

答案 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以使示例正常工作。