3 votes

Échec de l'importation de données volumineuses en tant que dataframe, de Google BigQuery vers Google Cloud DataLab.

J'ai essayé deux approches pour importer une grande table dans Google BigQuery, environ 50 000 000 lignes, 18GB, dans un dataframe vers Google Datalab, afin d'effectuer l'apprentissage automatique en utilisant Tensorflow.

J'utilise d'abord (tous les modules nécessaires sont importés) :

data = bq.Query('SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME`').execute().result().to_dataframe()

Ensuite, il continue Running... jusqu'à la fin des temps. Même si je le fais LIMIT 1000000 Il n'y a pas de changement.

Deuxièmement, j'utilise :

data = pd.read_gbq(query='SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME` LIMIT 1000000', dialect ='standard', project_id='PROJECT_ID')

Il fonctionne bien au début, mais lorsqu'il atteint environ 450 000 lignes (calculé à l'aide du pourcentage et du nombre total de lignes), il se bloque :

Got page: 32; 45.0% done. Elapsed 293.1 s.

Et je ne trouve pas comment activer allowLargeResults dans read_gbq(). Comme il s'agit d'une document dit, j'essaie :

data = pd.read_gbq(query='SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME` LIMIT 1000000', dialect ='standard', project_id='PROJECT_ID', configuration = {'query': {'allowLargeResult': True}})

Ensuite, je reçois :

read_gbq() got an unexpected keyword argument 'configuration'

C'est ainsi que j'ai même échoué à importer 1 000 000 de lignes dans Google Cloud Datalab. Je veux en fait importer 50 fois la taille des données.

Une idée à ce sujet ?

Gracias

2voto

Avant de charger des ensembles de données volumineux dans Google Cloud Datalab : Veillez à envisager des alternatives telles que celles mentionnées dans les commentaires de cette réponse. Utilisez des données échantillonnées pour l'analyse initiale, déterminez le modèle correct pour le problème et utilisez ensuite une approche par pipeline, telle que Google Cloud Dataflow pour traiter le grand ensemble de données.

Il existe une discussion intéressante sur l'amélioration des performances de Datalab lors du téléchargement de données de BigQuery vers Datalab. aquí . Sur la base de ces tests de performance, une amélioration de la performance a été intégrée dans Google Cloud Datalab en Demande de retrait #339 . Cette amélioration ne semble pas être mentionnée dans la notes de mise à jour pour Datalab mais je crois que les correctifs sont inclus dans Datalab 1.1.20170406. Veuillez vérifier la version de Google Cloud Datalab pour vous assurer que vous exécutez. au moins version 1.1.20170406. Pour vérifier la version, cliquez d'abord sur l'icône de l'utilisateur dans le coin supérieur droit de la barre de navigation dans Cloud Datalab, puis cliquez sur À propos de Datalab .

En ce qui concerne la pandas.read_gbq() qui semble être bloquée. J'aimerais faire quelques suggestions :

  1. Ouvrez une nouvelle question dans le pandas-gbq dépôt aquí .
  2. Essayez d'extraire des données de BigQuery vers Google Cloud Storage au format csv, par exemple, que vous pouvez ensuite charger dans un cadre de données à l'aide de la fonction pd.read_csv . Voici deux méthodes pour y parvenir :

Utilisation des outils CLI de Google BigQuery/Cloud Storage : L'utilisation de la bq outil de ligne de commande et gsutil outil de ligne de commande L'objectif est d'extraire les données de BigQuery vers Google Cloud Storage, puis de télécharger l'objet vers Google Cloud Datalab. Pour ce faire, tapez bq extract <source_table> <destination_uris> , suivi de gsutil cp [LOCAL_OBJECT_LOCATION] gs://[DESTINATION_BUCKET_NAME]/

Utilisation de Google Cloud Datalab

import google.datalab.bigquery as bq
import google.datalab.storage as storage
bq.Query(<your query>).execute(output_options=bq.QueryOutput.file(path='gs://<your_bucket>/<object name>', use_cache=False)).result()
result = storage.Bucket(<your_bucket>).object(<object name>).download()

En ce qui concerne l'erreur read_gbq() got an unexpected keyword argument 'configuration' la possibilité de passer des arguments arbitraires sous forme de mots clés ( configuration ) a été ajouté dans la version 0.20.0 . Je pense que cette erreur est due au fait que pandas n'est pas à jour. Vous pouvez vérifier la version de pandas installée en lançant

import pandas
pandas.__version__

Pour passer à la version 0.20.0, exécutez la commande suivante pip install --upgrade pandas pandas-gbq . Cela permettra également d'installer pandas-gbq qui est une dépendance optionnelle pour pandas .

Vous pouvez également essayer d'itérer sur le tableau dans Google Cloud Datalab. Cela fonctionne, mais c'est probablement plus lent. Cette approche a été mentionnée dans une autre réponse StackOverflow ici : https://stackoverflow.com/a/43382995/5990514

J'espère que cela vous aidera ! N'hésitez pas à me faire part de vos questions afin que je puisse améliorer cette réponse.

Anthonios Partheniou

Contributeur à Cloud Datalab

Mainteneur de projet à pandas-gbq

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X