如何将文件从 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 驱动器位置?
使用模块 os 和 abspath 如下:
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
我将文件存储在驱动器“/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 驱动器位置?
使用模块 os 和 abspath 如下:
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