如何将文件从 google 云端加载到作业

how to load file from google cloud to job

我将文件存储在驱动器“/content/drive/My Drive/BD-CW2”文件名上 pickleRdd 与作业相同 read_rdd.py

但是当我 运行 集群上的工作时,我得到

回溯(最近调用最后):文件 “/tmp/18dcd2bf5c104f01b6d25ea6919b7cfc/read_rdd.py”,第 55 行,在 read_RDD(sys.argv[1:]) 文件“/tmp/18dcd2bf5c104f01b6d25ea6919b7cfc/read_rdd.py”,第 32 行,在 read_RDD

在作业中读取文件的代码

RDDFromPickle  = open('pickleRdd', 'rb')

RDDFromPickle = pickle.load(RDDFromPickle)

如何重定向上面的代码以供阅读 来自驱动器(/content/drive/My Drive/BD-CW2)? 或者将文件从驱动器移动到集群以便作业可以访问它? 当我 运行 on colab 时一切正常,只有当我 运行 on cluster

时无法访问

最简单的方法似乎是调整

 RDDFromPickle  = open('/content/drive/My Drive/BD-CW2/pickleRdd', 'rb')

但是我如何传递 google 驱动器位置?

使用模块 osabspath 如下:

import os.path
RDDFromPickle = open(os.path.abspath('/content/drive/My Drive/BD-CW2/pickleRdd', 'rb'))
RDDFromPickle = pickle.load(RDDFromPickle)

由于您使用的是 Google Cloud Platform,我猜您正在将 pyspark 文件部署到 Cloud Dataproc。如果是这样,我建议将您的文件上传到 Google Cloud Storage 中的存储桶,然后使用如下代码从那里读取该文件(猜测它是 CSV 文件):

from pyspark.sql import SparkSession

spark = SparkSession \
   .builder \
   .appName('dataproc-python-demo') \
   .getOrCreate()

df = spark.read.format("csv").option("header", 
     "false").load("gs://<bucket>/file.csv")

count_value = df.rdd.map(lambda line: (line._c0, line._c1)).count()

print(count_value)

在上面的代码中,它创建了一个 Dataframe,我将其转换为 RDD 类型来格式化值,但您也可以使用 Dataframe 类型来完成。

请注意,_c0 和 _c1 是在 CSV 文件没有 header 时获取的列的默认名称。一旦你得到类似这样的代码,你可以通过这种方式将它提交到你的 dataproc 集群:

gcloud dataproc jobs submit pyspark --cluser <cluster_name> --region 
<region, example us-central1> gs://<bucket>/yourpyfile.py

要在 Dataproc 中提交新作业,您可以参考此 link [1]。

[1] https://cloud.google.com/dataproc/docs/guides/submit-job#submitting_a_job