我一直试图从下面的api流式传输数据,但收效甚微。
https://dev.socrata.com/foundry/data.cityofchicago.org/8v9j-bter
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。