如何使用Appengine和来自API的Python脚本流数据将数据流式传输到Google Cloud BigQuery?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Appengine和来自API的Python脚本流数据将数据流式传输到Google Cloud BigQuery?相关的知识,希望对你有一定的参考价值。

我一直试图从下面的api流式传输数据,但收效甚微。

https://dev.socrata.com/foundry/data.cityofchicago.org/8v9j-bter

  • 使用shell脚本自动化datalab笔记本太过分了
  • 使用气流进行协调也太过分了
  • 下面的代码在datalab笔记本中工作,但不知道“Context”magic命令是否可以在常规脚本中工作。
  • 这有可能在appengine?
  • 有人可以提供有关此运行所需的其他脚本的指导吗?
  • 代码缩进可能已关闭

main.py脚本

       #install main packages
      !pip install sodapy
     import pandas as pd
     from sodapy import Socrata
     from google.datalab import Context

     #put into dataframe
     client = Socrata("data.cityofchicago.org", None)
     results = client.get("8v9j-bter", limit=2000)
     results_df = pd.DataFrame.from_records(results)

     #flow into BigQuery
     results_df.to_gbq('chicago_traffic.demo_data', Context.default().project_id,
                   chunksize=2000, verbose=True, if_exists='append')

App.yaml脚本

     runtime: python27
      api_version: 1
     threadsafe: true

      handlers:
      - url: /.*
       script: main.app

cron.yaml脚本

  cron:
     - description: "append traffic data"
      url: /.*
      target: main
      schedule: every 1 mins 
  retry_parameters:
     min_backoff_seconds: 2.5
     max_doublings: 5

requirements.txt

   pandas==0.22.0
   sodapy==1.4.6
   datalab==1.1.2
   google-api-python-client
答案

使用你正在使用的app.yaml你将在App Engine Standard Enviroment部署。当您使用标准环境时,您可以使用任何these built-in third party libraries将它们添加到您的app.yaml文件中,或者您可以按照此link中的步骤使用任何其他第三方库。

这里的问题是,如previous link I shared所述:

您可以使用纯Python代码而没有C扩展的第三方库,

pandas库的部分代码用C(https://pandas.pydata.org/#library-highlights How to solve import error for pandas?)编写,因此为了使用Pandas,你需要使用App Engine Flexible Environment

您需要对文件进行一些修改才能运行部署。请按照以下链接调整文件以适应灵活的环境:

!pip install sodapy利用魔法命令!,which is something exclusive from some Notebooks environments。您无法将该行添加到main.py文件中。此操作(pip install sodapy)将在部署应用程序期间运行,因为您要将sodapy == 1.4.6添加到requirements.txt文件中。

您应该只需将project_id添加为str,而不是添加Context.default()。project_id。在App Engine内部运行Flex授权应该不是问题。如果你想在本地运行它,请记住使用具有正确权限的a service account

以上是关于如何使用Appengine和来自API的Python脚本流数据将数据流式传输到Google Cloud BigQuery?的主要内容,如果未能解决你的问题,请参考以下文章

从 appengine 上传到 bigquery 时如何忽略未知值

在 AppEngine/GWT 中的客户端本地存储数据

Api密钥暴露在Appengine的日志中

库 appengine.api.datastore 和 com.google.cloud.datastore 有啥区别?

如何验证来自 HTTP 请求的 Google Cloud Task 令牌?

python 使用google appengine blobstore api上传的Flask示例。