Malheureusement, je ne pense pas qu'il y a une propre plot() ou hist() fonction dans le PySpark Dataframes de l'API, mais je suis en espérant que les choses finiront par aller dans cette direction.
Pour le moment, on peut calculer l'histogramme de l'Étincelle, et tracer l'histogramme calculé qu'un graphique à barres. Exemple:
import pandas as pd
import pyspark.sql as sparksql
# Let's use UCLA's college admission dataset
file_name ="https://stats.idre.ucla.edu/stat/data/binary.csv"# Creating a pandas dataframe from Sample Data
df_pd = pd.read_csv(file_name)
sql_context = sparksql.SQLcontext(sc)# Creating a Spark DataFrame from a pandas dataframe
df_spark = sql_context.createDataFrame(df_pd)
df_spark.show(5)
C'est ce que l'apparence des données:
Out[]:+-----+---+----+----+|admit|gre| gpa|rank|+-----+---+----+----+|0|380|3.61|3||1|660|3.67|3||1|800|4.0|1||1|640|3.19|4||0|520|2.93|4|+-----+---+----+----+
only showing top 5 rows
# This is what we want
df_pandas.hist('gre');
# Doing the heavy lifting in Spark. We could leverage the `histogram` function from the RDD api
gre_histogram = df_spark.select('gre').rdd.flatMap(lambda x: x).histogram(11)# Loading the Computed Histogram into a Pandas Dataframe for plotting
pd.DataFrame(
list(zip(*gre_histogram)),
columns=['bin','frequency']).set_index('bin').plot(kind='bar');
J'obtiens une erreur lors de la génération d'un dataframe de la zip itérateur. Compte tenu de la pyspark histogramme, la création de l'pandas dataframe est un peu plus propre et fonctionne pour moi avec pd.DataFrame(list(zip(*gre_histogram)), columns=['bin', 'frequency']) gre_histogram = spark_df.sélectionnez ("gre").rdd.flatMap(lambda x: x).histogramme(11) est la ligne gagnante, combo, ce gars avec le matplotlib réponse ci-dessous
La histogramme méthode pour RDDs retourne le bin plages et la corbeille du compte. Voici une fonction qui prend cet histogramme des données et des parcelles comme un histogramme.
import numpy as np
import matplotlib.pyplot as mplt
import matplotlib.ticker as mtick
def plotHistogramData(data):
binSides, binCounts = data
N = len(binCounts)
ind = np.arange(N)
width =1
fig, ax = mplt.subplots()
rects1 = ax.bar(ind+0.5, binCounts, width, color='b')
ax.set_ylabel('Frequencies')
ax.set_title('Histogram')
ax.set_xticks(np.arange(N+1))
ax.set_xticklabels(binSides)
ax.xaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
mplt.show()
(Ce code suppose que les bacs ont la même longueur.)
binSides, binCounts = données Quel est le format d'entrée des données? pour ce qui est de travail en utilisant comme entrée aggData.select(columnName).rdd.flatMap(lambda x: x).histogram(10). Question: comment puis-je dessiner, sur le x à la place des bacs de valeur(1,2,3,...), la valeur moyenne à l'intérieur du bac?
L'agrégatif des opérateurs qui se passe sur chaque partition de la grappe, et n'a pas besoin d'un aller-retour à l'accueil.
Mes résultats ont montré que " DataFrame[histogramme: bigint]' savez-vous pourquoi il ne génère pas de réelle intrigue? merci Il me semble que si c'est le schéma de l'intrigue (qui est OK), il contient des données réelles? Oui, il contient les données réelles. J'ai essayé différentes manières, mais ne pouvaient pas générer la figure 🙁 Nulle part dans ce code est-il tracer une figure... le retour de ce code est simplement un PySpark DataFrame avec une colonne nommée "histogramme".
Malheureusement, je ne pense pas qu'il y a une propre
plot()
ouhist()
fonction dans le PySpark Dataframes de l'API, mais je suis en espérant que les choses finiront par aller dans cette direction.Pour le moment, on peut calculer l'histogramme de l'Étincelle, et tracer l'histogramme calculé qu'un graphique à barres. Exemple:
C'est ce que l'apparence des données:
Histogramme lorsque tracées à l'aide de df_pandas.hist()
Histogramme calculé à l'aide du RDD.histogramme()
zip
itérateur. Compte tenu de la pyspark histogramme, la création de l'pandas dataframe est un peu plus propre et fonctionne pour moi avecpd.DataFrame(list(zip(*gre_histogram)), columns=['bin', 'frequency'])
gre_histogram = spark_df.sélectionnez ("gre").rdd.flatMap(lambda x: x).histogramme(11) est la ligne gagnante, combo, ce gars avec le matplotlib réponse ci-dessous
OriginalL'auteur Shivam Gaur
Vous pouvez maintenant utiliser le pyspark_dist_explore paquet de tirer parti de la matplotlib hist fonction pour Spark DataFrames:
Cette bibliothèque utilise le ca de l'histogramme de la fonction pour calculer la corbeille de valeurs.
import matplotlib.pyplot comme plt
OriginalL'auteur Chris van den Berg
La
histogramme
méthode pour RDDs retourne le bin plages et la corbeille du compte. Voici une fonction qui prend cet histogramme des données et des parcelles comme un histogramme.(Ce code suppose que les bacs ont la même longueur.)
pour ce qui est de travail en utilisant comme entrée
aggData.select(columnName).rdd.flatMap(lambda x: x).histogram(10)
. Question: comment puis-je dessiner, sur le x à la place des bacs de valeur(1,2,3,...), la valeur moyenne à l'intérieur du bac?OriginalL'auteur Andrew MacFie
Une autre solution, sans le besoin pour des importations,
qui devrait également être efficace; tout d'Abord, utilisez la fenêtre de partition:
Puis tout ce que vous besoin d'utiliser compter agrégation partitionné par la fenêtre:
df.select(F.count('column_of_values').over(win).alias('histogram'))
L'agrégatif des opérateurs qui se passe sur chaque partition de la grappe, et n'a pas besoin d'un aller-retour à l'accueil.
Il me semble que si c'est le schéma de l'intrigue (qui est OK), il contient des données réelles?
Oui, il contient les données réelles. J'ai essayé différentes manières, mais ne pouvaient pas générer la figure 🙁
Nulle part dans ce code est-il tracer une figure... le retour de ce code est simplement un PySpark DataFrame avec une colonne nommée "histogramme".
OriginalL'auteur Elior Malul
C'est simple et fonctionne bien.
OriginalL'auteur conner.xyz