【问题标题】:how to load file from google cloud to job如何将文件从谷歌云加载到工作
【发布时间】:2020-05-20 22:28:18
【问题描述】:

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

但是当我在集群上运行作业时,我得到了

Traceback(最近一次调用最后一次):文件 “/tmp/18dcd2bf5c104f01b6d25ea6919b7cfc/read_rdd.py”,第 55 行,在 read_RDD(sys.argv[1:]) 文件“/tmp/18dcd2bf5c104f01b6d25ea6919b7cfc/read_rdd.py”,第 32 行,在 读取_RDD

在作业中读取文件的代码

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

RDDFromPickle = pickle.load(RDDFromPickle)

我如何将上面的代码重定向到阅读 从驱动器(/内容/驱动器/我的驱动器/BD-CW2)? 或将文件从驱动器移动到集群以便作业可以访问它? 当我在 colab 上运行时一切正常,只有在集群上运行时无法访问

似乎更简单的方法是调整

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

但我如何才能通过谷歌驱动器位置?

【问题讨论】:

    标签: python google-cloud-platform pyspark pickle


    【解决方案1】:

    由于您使用的是 Google Cloud Platform,我猜您正在将 pyspark 文件部署到 Cloud Dataproc。如果是这样,我建议将您的文件上传到 Google Cloud Storage 中的 buket 并使用以下代码从那里读取此文件(猜测它是 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 文件没有标题时获取的列的默认名称。获得类似这样的代码后,您可以通过以下方式将其提交到您的 dataproc 集群:

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

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

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

    【讨论】:

    • 感谢我使用实际picke文件的详细解释,但在您提供所有详细信息后,我可以轻松管理所有内容
    【解决方案2】:

    将模块 osabspath 一起使用,如下所示:

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

    【讨论】:

    • 嗨,我仍然在获取文件“/tmp/8dcaa3f4bf634ef4912f6f4b25e155cf/read_rdd.py”,第 60 行,在 read_RDD(sys.argv[1:]) 文件“/tmp/ 8dcaa3f4bf634ef4912f6f4b25e155cf/read_rdd.py",第 37 行,在 read_RDD RDDFromPickle = open(os.path.abspath('/content/drive/My Drive/BD-CW2/pickleRdd'), 'rb') FileNotFoundError: [Errno 2] 否这样的文件或目录:'/content/drive/My Drive/BD-CW2/pickleRdd'
    • 请编写您用于此任务的完整代码块。获取完整信息以进行准确调试非常重要。
    • %%writefile read_cloud.py import pickle import os.path RDDFromPickle = open(os.path.abspath('/content/drive/My Drive/BD-CW2/pickleRdd'), 'rb' ) #RDDFromPickle = open(RDDFromPickle, 'rb') RDDFromPickle = pickle.load(RDDFromPickle)
    • 并运行作业!gcloud dataproc 作业提交 pyspark --cluster $CLUSTER --region $REGION \ ./read_cloud.py \ 为格式化道歉
    • 首先,请将您的代码放在一对```之间以正确格式化您的问题/cmets。您的 OP 格式正确,但您的 cmets 无助于解决问题。其次,pickleRdd的内容是什么?看起来它有一些对 read_rdd.py 的调用,它无法正确获取您的路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2020-12-11
    • 2019-04-13
    • 2019-04-29
    相关资源
    最近更新 更多