Pyspark: muestra el histogtwig de una columna de dataframe

En el dataframe de pandas, estoy usando el siguiente código para trazar el histogtwig de una columna:

my_df.hist(column = 'field_1') 

¿Hay algo que pueda lograr el mismo objective en el dataframe de pyspark? (Estoy en el cuaderno de Jupyter) ¡Gracias!

Desafortunadamente, no creo que haya una función de plot() o hist() limpia en la API de marcos de datos de PySpark, pero espero que las cosas eventualmente vayan en esa dirección.

Por el momento, puede calcular el histogtwig en Spark y trazar el histogtwig calculado como un gráfico de barras. Ejemplo:

 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) 

Así es como se ven los datos:

 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'); 

Histogtwig cuando se grafica usando df_pandas.hist ()

 # 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'); 

Histogtwig calculado utilizando RDD.histogram ()

Ahora puede usar el paquete pyspark_dist_explore para aprovechar la función hist matplotlib para Spark DataFrames:

 from pyspark_dist_explore import hist import matplotlib.pyplot as plt fig, ax = plt.subplots() hist(ax, data_frame, bins = 20, color=['red']) 

Esta biblioteca utiliza la función de histogtwig rdd para calcular valores de bin.

El método de histogram para RDDs devuelve los rangos de bin y los conteos de bin. Aquí hay una función que toma estos datos de histogtwig y los grafica como un histogtwig.

 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() 

(Este código asume que los contenedores tienen la misma longitud).

Otra solución, sin la necesidad de importaciones adicionales, que también debe ser eficiente; Primero, usa la partición de la ventana:

 import pyspark.sql.functions as F import pyspark.sql as SQL win = SQL.Window.partitionBy('column_of_values') 

Luego, todo lo que necesita es usar la agregación de conteos particionada por la ventana:

df.select(F.count('column_of_values').over(win).alias('histogram'))

Los operadores agregativos ocurren en cada partición del clúster y no requieren un viaje de ida y vuelta adicional al host.

Esto es sencillo y funciona bien.

 df.groupby( '' ).count().select( 'count' ).rdd.flatMap( lambda x: x ).histogram(20)