PC & Mobile

Trouver des hamburgers, des bars et les meilleurs Yelpers de la ville – Jagerynn Ting Verano – Moyen

Trouver des hamburgers, des bars et les meilleurs Yelpers de la ville - Jagerynn Ting Verano - Moyen


Comment fonctionne PySpark: un bref récapitulatif

En résumé, PySpark est un framework informatique distribué: il permet de traiter des données en parallèle en les distribuant sur plusieurs nœuds.

Parallélisme de données distribué

En général, les opérations sur la mémoire sont, sur le plan des calculs, moins chères que celles sur les réseaux et les disques. Spark offre aux utilisateurs la possibilité d’effectuer une informatique nettement plus rapide que des systèmes comme Hadoop en décalant autant d’opérations en mémoire et en minimisant la quantité sur le réseau, réduisant ainsi le trafic sur le réseau.

Une configuration PySpark simple et facile sur Colab

Photo de Fahrul Azmi sur Unsplash

Voici une liste des bibliothèques dont vous aurez besoin pour commencer:

  • OS- pour définir vos variables d'environnement
  • parc de recherche - rend PySpark importable
  • pyspark.sql.SparkSession - pour accéder aux fonctionnalités de Spark et travailler avec Spark DataFrames
  • google.colab.drive - pour accéder au fichier de données sur mon disque
  • la Type de fichiervous travaillez avec (dans mon cas, c’est json)

Asif Ahmed a écrit un excellent article auquel j'ai fait référence pour m'aider à installer PySpark. Ce processus est universel. Tout le monde peut donc utiliser le même bloc de code pour télécharger PySpark sur Colab. La seule chose que vous devriez prendre note est la version de Spark que vous téléchargez. Ce devrait être le dernier disponible. J'ai fait un commentaire lorsque cela est pertinent et documenté une partie de ce qui se passe dans le code ci-dessous.

! apt-get install openjdk-8-jdk-headless -qq> / dev / null
! wget -q https://www-us.apache.org/dist/spark/spark-2.4.3/spark-2.4.3-bin-hadoop2.7.tgz # basé sur la dernière version
! tar xf spark-2.4.3-bin-hadoop2.7.tgz
! pip install -q findpark
#setting les variables d'environnement
os.environ["JAVA_HOME"] = "/ usr / lib / jvm / java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-2.4.3-bin-hadoop2.7" #sous la dernière version
#finds PySpark pour le rendre importable
findpark.init ()
spark = SparkSession.builder.master ("local[*]") .getOrCreate ()

Pour éviter le temps d'attente nécessaire au téléchargement d'un fichier volumineux sur colab, j'ai transféré mes fichiers sur Google Drive et ai autorisé mon ordinateur portable à y accéder.

drive.mount ('/ content / drive') #produit un lien avec des instructions pour entrer un code d'authentification

Une fois que vous avez entré le code d’authentification, cliquez sur le bouton fléché à gauche de votre Colab Notebook et recherchez votre fichier.

Accéder à votre fichier de données via le bouton fléché

Une fois que vous avez trouvé votre fichier, faites un clic droit dessus et copiez son chemin. Passer sa ficelle à travers spark.read.filetype (). Clause de non-responsabilité: cela ne fonctionnera pas si vous n’ajoutez pas de “/” au début du chemin que vous avez copié!

A ma bonne surprise, spark.read.json () déduit automatiquement le schéma de mon fichier JSON imbriqué et le convertit en PySpark DataFrame.

Exploration

Photo par Andrew Neel sur Unsplash

Vous trouverez ci-dessous une liste des méthodes que j'ai appliquées à mon PySpark DataFrame pour explorer mon jeu de données.

df.printSchema () renvoie un format d'arborescence d'informations sur le cadre de données.

Exemple de schéma de structure de données sous forme d'arborescence

df.select () est une méthode pour interroger. Les fonctionnalités que vous souhaitez afficher et les opérations de type SQL sont transmises via cette méthode. Il n'est pas nécessaire de mentionner des fonctionnalités. Cependant, sans elles, la requête renvoie des valeurs booléennes. Dans les deux cas, le résultat obtenu est toujours une liste de lignes et non une base de données.

.collecte() assemble l'ensemble de données fragmenté précédemment distribué. Évitez de l'appeler avant d'avoir besoin des résultats collectés.

pyspark.sql.functions.udf ou un fonction définie par l'utilisateurest une fonction qui peut être appliquée à toutes les colonnes de dataframe. Deux arguments sont nécessaires: la transformation et le type de données attendu de votre variable transformée. Ils sont utilisés en conjonction avec df.select (). De plus, outre l’utilisation des fonctions présentes dans fonctions pyspark.sql, il est possible de définir vos propres fonctions et de les transmettre via la méthode udf.

spark.createDataFrame () transforme la sortie de la requête (une liste de lignes) en un cadre de données.

df.show () affiche un objet PySpark dataframe avec 20 lignes. df.show (n) affiche uniquement les n premières lignes du cadre de données.

Sortie de df.show () sur Colab

df.withColumn () retourne une nouvelle image contenant l'image d'origine et une nouvelle colonne avec l'opération spécifiée. Les deux arguments requis pour cette méthode sont le nouveau nom de colonne et l'opération.

Exemple d'utilisation

L'ensemble de données m'a donné une liste d'amis par utilisateur, à partir duquel j'ai créé une colonne avec le nombre d'amis par utilisateur.

#créer une fonction définie par l'utilisateur
split_count = udf (lambda z: len (z.split (“,“)), IntegerType ())
#transform et attache une nouvelle colonne à la base de données d'origine
df_user1 = df_user.withColumn («no_friends», split_count (df_user.friends))

Visualisation

L'appel de la fonction d'affichage vous permet d'afficher des visualisations au format PySpark dataframe. Alternativement, en appelant .toPandas (), vous pouvez facilement utiliser seaborn, matplotlib et d’autres bibliothèques de visualisation que vous souhaitez utiliser.

Exemple d'utilisation

Histogramme de la note moyenne de chaque utilisateur
avg_stars_query = df_user.select ("average_stars"). collect ()
avg_stars_df = spark.createDataFrame (avg_stars_query)
sns.distplot (avg_stars_df.toPandas (), bins = 4, kde = False)

Construire un modèle avec MLlib

La bibliothèque ML de PySpark est très similaire à celle de sklearn, avec quelques différences mineures. Au lieu de train_test_split, par exemple,randomSplit est utilisé. Voici une ventilation générale de la construction de modèles avec MLlib:

  • fusionner les caractéristiques dans une colonne avec pyspark.ml.feature.VectorAssembler ou mllib.linalg.DenseVector
  • Fonctions d'échelle, par exemple avec pyspark.ml.feature.StandardScaler
  • effectuer un test de train en utilisant randomSplit
  • modèle de train avec 1 colonne «caractéristiques» et 1 colonne «étiquette»
  • évaluer avec des métriques, par exemple mllib.evaluation.RegressionMetrics

Cas d'utilisation

Photo de Marvin Meyer sur Unsplash

J'étais curieux de connaître les différents profils de Yelpers. J'ai donc effectué la mise en cluster K-Means et accédé à leur WSSE à différents niveaux de k. Le k optimal se trouve au «coude», où l'indentation du graphique est beaucoup plus grande et d'une manière qui imite la courbure d'un bras. Ceci est connu comme la méthode du coude.

Malgré la recherche d'un niveau optimal de k, l'analyse des clusters peut encore s'avérer difficile avec autant de fonctionnalités. La réduction de la dimensionnalité serait utile pour simplifier le modèle.

Réduction de la dimensionnalité

Carte thermique de corrélation des variables basées sur l'échantillon (n = 500 000)

Il semble qu’il n’existe pas de méthode claire pour sélectionner les caractéristiques en fonction de cette carte thermique, la majorité ayant un coefficient de corrélation de 0,30.

En outre, j’ai bricolé avec PySpark pour réduire la dimensionnalité, mais n’ai trouvé aucune solution directe pour récupérer des noms d’entités en arrière ou des entités de classement par importance aux fins de l’interprétation.

Une autre solution serait de transformer les variables. En fusionnant les compliments que l'utilisateur a donnés dans une colonne et les compliments que l'utilisateur a reçus dans une autre, j'ai pu réduire le nombre de fonctionnalités à 6.

Méthode Elbow: Recherche du nombre optimal de grappes

Dans le graphique ci-dessus, le nombre de grappes va de 2 à 24. Le coude se produit à k = 6, c'est-à-dire que 6 profils d'utilisateur distincts peuvent être trouvés.

Solutions alternatives

Algorithmes de clustering alternatifs

Les autres algorithmes proposés par le package MLlib de PySpark comprennent les modèles de mélange gaussien, le LDA (souvent utilisé dans l’exploration de texte) et la bissection de k-moyennes. La scission de k-means est un algorithme de classification hiérarchique qui utilise une approche descendante pour fractionner les données. Il est préférable pour les grands ensembles de données.

Sous-échantillonnage

Sous-échantillonnage, par exemple, environ un tiers des données (environ 500 000 observations) et appels .toPandas () vous permettra d'effectuer une sélection de fonctionnalités et de dispenser une formation à scikit-learn sur le cadre de données Pandas récemment converti.

Bonus: réglage hyperparamètre

Photo de Rodion Kutsaev sur Unsplash

PySpark permet également aux utilisateurs de sélectionner les meilleurs modèles en fournissant des fonctionnalités de traitement en pipeline et de réglage hyperparamètre.

Voici quelques termes que vous êtes susceptible de rencontrer lors de la sélection de votre modèle:

  • Estimateurs: algorithmes ou pipeline
  • Évaluateurs: métriques d'évaluation
  • Validation croisée et partage de validation de train
  • Paramètres nommés, c'est-à-dire paramMaps a un ensemble spécifié (paramètre, valeur)
  • Constructeur de grille de paramètres, c'est-à-dire paramGridBuilder

Remarque: il existe également une bibliothèque PySpark-sklearn pour la recherche sur grille.

Mon avis

Photo par Alex Ware sur Unsplash

La formation du modèle sur mon ordinateur portable prenait beaucoup de temps. Plusieurs tentatives d’autres algorithmes de classification et de recherche sur grille n’étaient pas possibles simplement à cause de problèmes d’espace mémoire.

Néanmoins, PySpark est un excellent outil si vous souhaitez pouvoir gérer gratuitement de grandes données, et de nombreuses entreprises l’utilisent aujourd’hui. J'ai récemment appris l'existence de PySparkling, une combinaison de H2O, une plate-forme d'apprentissage automatique automatisée facile à utiliser, et de PySpark.

Que pouvez-vous attendre?

Dans la deuxième partie, nous passerons en revue l’analyse par grappes et nous vous présenterons les résultats de chaque grappe.

En résumé, nous avons récapitulé la façon dont PySpark gère les mégadonnées, comment configurer le système sur Colab, certaines des méthodes couramment utilisées pour travailler avec des cadres de données (par opposition aux RDD) et comment former un modèle dans PySpark.

J'espère que vous avez apprécié la lecture de cet article! N'hésitez pas à laisser vos pensées (ou conseils) ci-dessous.

Références

[1] Asif Ahmed, PySpark dans Google Colab, vers la science des données

[2] Guide de la bibliothèque d'apprentissage machine (MLlib), ApacheSpark 2.4.3

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close