Bonnes pratiques pour accéder à des données de grande taille dans Azure Databricks avec R

0

La question

Nouveau dans Azure et DatabricksJe suis en train d'essayer d'accéder à un grand ensemble de données, sur lequel je voudrais lancer un processus de R (écrit en data.table et qui fonctionne bien en local).

Je ne suis pas à l'aise avec les bons termes ou comment l'ensemble de l'environnement Azure fonctionne, mais pour l'instant, mes données est présent dans 3 formats :

  • table
  • paquet
  • csv

Première tentative (et le plus logique pour moi) : un classique fread sur les fichiers csv. Sur les petits fichiers, tout est bien. Sur les "gros" fichiers (3Go), il faut beaucoup, beaucoup de minutes tandis que localement, il ne faut qu'une poignée de secondes.

enter image description here

Pourquoi est-il beaucoup plus de temps que localement ?

Deuxième tentative avec SparkR sur les fichiers csv et collect() pour travailler avec data.table enter image description here

Mais collect() renvoie une erreur : enter image description here

Est-il quelque chose que je peux faire pour régler cela ?

Troisième tentative : les mêmes que ci-dessus sur les fichiers delta, avec le même type d'erreur

enter image description here

Quatrième tentative : requête SQL à partir de SparkR mais collect renvoie toujours la même erreur

enter image description here

Est l'un de mes tentatives de meilleur qu'un autre ? Suis-je sur la bonne voie ? Ai-je raté quelque chose ?

Toute aide ou conseils seront très utiles.

azure data.table databricks r
2021-11-22 10:39:01
1

La meilleure réponse

0

En matière de chargement de DBFS elle a fait l'objet de stockage dans le cloud pas de stockage local, donc le temps de chargement sera évidemment beaucoup plus de temps.

Concernant l'erreur, vous pouvez ajuster l'Étincelle de la configuration, mais n'est pas recommandé que vous pouvez sortir de la mémoire d'erreur:

spark.driver.maxResultSize <X>g

Vous pouvez l'ajuster dans le groupe étincelle config enter image description here

La meilleure solution est d'utiliser plusieurs instances (donc il y aura automatiquement plus de partitions - cette limite s'applique par partition, instance de la mémoire RAM taille est également importante, mais mieux habituellement juste ajouter plus de cas à l'échelle à l'horizontale). Activer la fonction d'auto-mise à l'échelle est recommandé en cas de grand ensemble de données.

S'il vous plaît ne pas utiliser collect() comme on le lit tous vos dataframe sur pilote pour objet de sorte qu'il ne fonctionnera pas. En général, cette fonction n'est pas recommandée, même pour les plus petits ensembles de données. Si vous voulez un diagnostic de votre dataframe veuillez utiliser des fonctions comme .first() ou .spectacle avec limite.

2021-11-22 13:04:06

Merci pour votre réponse, c'est un peu plus clair. Mais en tant que nouvel utilisateur de ce milieu, je ne comprends pas tout :) Comment puis-je régler l'Étincelle de config par exemple ? Comment puis-je utiliser plusieurs instances ? (Vous avez raison, les données sont dans le cloud. Mon cluster a 252Go et 72 cœurs).
Discus23

wow ce cluster est déjà assez grand. Je vais mettre à jour ma réponse avec plus de détails dans quelques heures. S'il vous plaît ne pas utiliser collect() comme on le lit tous vos dataframe sur pilote pour objet de sorte qu'il ne fonctionnera pas. En général, cette fonction n'est pas recommandée, même pour les plus petits ensembles de données. Si vous voulez diagnoze votre dataframe veuillez utiliser des fonctions comme .(premier) .spectacle avec limite.
Hubert Dudek

Jusqu'à maintenant, je n'ai pas trouvé une meilleure façon que collect() mon "local" d'un script écrit en data.table... Ne peut pas attendre de lire votre mise à jour !
Discus23

mais qu'est-ce que vous voulez réaliser? essayez d'affichage(df) aussi
Hubert Dudek

J'ai besoin d'exécuter un ensemble de script que j'ai écrit en data.table. Mais je pense que je vais devoir le réécrire en sparkr, droit ? Mais il semble de plus en plus complexe pour moi qu'il n'y paraît. J'ai essayé de créer une nouvelle colonne pour une longue période à l'aide strsplit sur une autre colonne, sans succès...
Discus23

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................