Pyspark GCP Dataproc spark消费BigQuery

Pyspark GCP Dataproc spark消费BigQuery,pyspark,google-cloud-platform,google-bigquery,google-cloud-dataproc,Pyspark,Google Cloud Platform,Google Bigquery,Google Cloud Dataproc,我对GCP谷歌云平台非常陌生,所以我希望我的问题不会显得那么愚蠢 舞台: 主要目标是从BigQuery收集少量扩展表,并应用少量转换。由于我计划使用Dataproc部署Pyspark脚本的表的大小,理想情况下,我将能够使用sqlContext对DFs(从BQ提取的表)应用少量sql查询。最后,我可以轻松地将这些信息转储到数据存储桶中的文件中 问题: 我可以在Pyspark脚本中使用导入google.datalab.bigquery作为bq 这个提议的模式是最有效的还是我可以验证其他模式?请记住

我对GCP谷歌云平台非常陌生,所以我希望我的问题不会显得那么愚蠢

舞台:

主要目标是从BigQuery收集少量扩展表,并应用少量转换。由于我计划使用Dataproc部署Pyspark脚本的表的大小,理想情况下,我将能够使用sqlContext对DFs(从BQ提取的表)应用少量sql查询。最后,我可以轻松地将这些信息转储到数据存储桶中的文件中

问题:

  • 我可以在Pyspark脚本中使用
    导入google.datalab.bigquery作为bq

  • 这个提议的模式是最有效的还是我可以验证其他模式?请记住,我需要创建许多时态查询,这就是我在Spark上思考的原因

  • 我希望使用pandas和bq来阅读结果查询,如下所示。稍后,我可能会从Spark使用
    sc.parallelize
    将pandas df转换为Spark df。这是正确的方法吗

  • 更新:
在与@Tanvee进行了一番交流之后,我们得出结论,当您需要将数据存储中的数据读取到Dataproc中时,GCP需要一个中间分配步骤。简单地说,您的spark或hadoop脚本可能需要一个临时存储桶,用于存储表中的数据,然后将其放入spark

参考资料:

\


非常感谢您将需要使用spark。GCP文档和文档中有一些示例。它将创建RDD,您可以将其转换为dataframe,然后您将能够执行所有典型的转换。希望对您有所帮助。

您可以直接使用以下选项从spark连接bigquery表

  • 您还可以使用spark bigquery连接器直接使用spark在dataproc上运行查询

  • 这是测试版的新连接器。这是bigquery的spark数据源api,易于使用

  • 请参阅以下连结:

    谢谢@Tanveer的回答,我来问你。如果我没有错误地获取数据,Pyspark会使用数据存储桶分配查询所需的所有数据,然后将数据重新加载到集群中吗?我在想,也许BigQuery可以作为数据目录扩展到dataproc集群。在这种情况下,如果我的BigQuery表太大,我不知道将其下载到bucket然后加载到集群中的效率有多高。你能确认一下我是否正确吗?谢谢你,安德烈斯,不。你不需要把数据放进桶里。您可以直接从spark代码中读取bigquery表中的数据。请看一下我给出的示例链接。请根据示例代码询问您是否在连接spark的bigquery时遇到任何问题。Tranveer我需要将查询结果保留在内存中,以创建一个新的临时视图,在该视图中我希望执行一些查询。显然,我无法将BQ join查询的结果保存在内存中。谢谢你的确认,它会留在记忆中。获得数据帧后,使用df.createOrReplaceTempView(“mySparkInmemoryTable”)。然后可以使用spark sql以多种方式查询它。完成后,您可以输出到GCS bucket或BigQuery等。我已经添加了我的脚本,我现在正在阅读这个公共查询。根据您发布的示例,需要定义一个目标bucket和一个输入bucket,如果我只需要在内存中读取查询结果,那么这样做的目的是什么?顺便说一句,脚本没有运行:(lol)