2016-08-25 16 views

cevap

9

Ne yazık ki, PySpark Dataframes API'sinde temiz bir plot() veya hist() işlevinin olduğunu sanmıyorum, ancak eninde sonunda şeylerin o yöne gideceğini umuyorum.

Şu an için, histogramını Spark içinde hesaplayabilir ve hesaplanan histogramı çubuk grafik olarak çizebilirsiniz. Örnek:

import pandas as pd 
import pyspark.sql as sparksql 

# Let's use UCLA's college admission dataset 
file_name = "http://www.ats.ucla.edu/stat/data/binary.csv" 

# Creating a pandas dataframe from Sample Data 
pandas_df = pd.read_csv(file_name) 

sql_context = sparksql.SQLcontext(sc) 

# Creating a Spark DataFrame from a pandas dataframe 
spark_df = sql_context.createDataFrame(df) 

spark_df.show(5) 

Bu veriler göründüğünü gibi:

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.hist('gre'); 

Histogram when plotted in using df.hist()

# Doing the heavy lifting in Spark. We could leverage the `histogram` function from the RDD api 

gre_histogram = spark_df.select('gre').rdd.flatMap(lambda x: x).histogram(11) 

# Loading the Computed Histogram into a Pandas Dataframe for plotting 

    pd.DataFrame(zip(list(gre_histogram)[0], 
        list(gre_histogram)[1]),columns=['bin','frequency']).set_index('bin').plot(kind='bar'); 

Histogram computed by using RDD.histogram()

+0

Bir "zip" yineleyiciden bir veri çerçevesi oluştururken bir hata alıyorum. Pyspark histogramı göz önüne alındığında, pandalar veri çerçevesinin oluşturulması biraz daha temizdir ve pd.DataFrame (liste (zip (* gre_histogram)), sütunlar = ['bin', 'sıklık']) ' –

+1

gre_histogram = spark_df ile benim için çalışır. select ('gre'). rdd.flatMap (lambda x: x) .histogram (11) kazanan çizgidir, bu adam matplotlib cevabı ile –

3

Artık matplotlib hist fonksiyonu kaldıraç pyspark_dist_explore paketini kullanabilirsiniz Spark DataFrames için:

from pyspark_dist_explore import hist 

fig, ax = plt.subplots() 
hist(ax, data_frame, bins = 20, color=['red']) 

Bu kitaplık, bin değerleri hesaplamak için rdd histogram işlevini kullanır.

+0

plt altında bulunamaz ... –

1

RDD'ler için histogram yöntemi bin aralıkları ve bin sayılarını döndürür. İşte bu histogram verilerini alan ve onu histogram olarak gösteren bir fonksiyon.

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

(Bu kod depo eşit uzunluğa sahip olduğu varsayılmaktadır.)

0

aynı zamanda verimli olmalıdır ilave ithalat ihtiyacı olmadan başka bir çözelti; Eğer pencere tarafından bölümlenmiş sayımı toplanmasına kullanmaya gerek tüm Ardından

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

: Birincisi, pencere bölümü kullanmak

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

toplulaştırıcı operatörler kümenin her bölümünde gerçekleşir ve ev sahibi için ekstra bir gidiş-dönüş gerektirmez.