2015-08-19 58 views
10

Posso convertire un Dataframe Pandas in RDD?Pandas Dataframe a RDD

if isinstance(data2, pd.DataFrame): 
    print 'is Dataframe' 
else: 
    print 'is NOT Dataframe' 

è dataframe

Ecco l'uscita quando si cerca di utilizzare .rdd

dataRDD = data2.rdd 
print dataRDD 

AttributeError       Traceback (most recent call last) 
<ipython-input-56-7a9188b07317> in <module>() 
----> 1 dataRDD = data2.rdd 
     2 print dataRDD 

/usr/lib64/python2.7/site-packages/pandas/core/generic.pyc in __getattr__(self, name) 
    2148     return self[name] 
    2149    raise AttributeError("'%s' object has no attribute '%s'" % 
-> 2150         (type(self).__name__, name)) 
    2151 
    2152  def __setattr__(self, name, value): 

AttributeError: 'DataFrame' object has no attribute 'rdd' 

Vorrei utilizzare Panda dataframe e non SqlContext di costruire, come io non sono sicuro se tutti le funzioni in Pandas DF sono disponibili in Spark. Se questo non è possibile, c'è qualcuno che può fornire un esempio di utilizzo di Spark DF

risposta

14

Posso convertire un Dataframe Pandas in RDD?

Beh, sì, puoi farlo. Pandas dati Frames

pdDF = pd.DataFrame([("foo", 1), ("bar", 2)], columns=("k", "v")) 
print pdDF 

##  k v 
## 0 foo 1 
## 1 bar 2 

possono essere convertiti in Spark dati Frames

spDF = sqlContext.createDataFrame(pdDF) 
spDF.show() 

## +---+-+ 
## | k|v| 
## +---+-+ 
## |foo|1| 
## |bar|2| 
## +---+-+ 

e dopo che si può facilmente accedere sottostante RDD

spDF.rdd.first() 

## Row(k=u'foo', v=1) 

Eppure, penso che tu abbia un'idea sbagliata qui . Pandas Data Frame è una struttura dati locale. È memorizzato ed elaborato localmente sul driver. Non esiste alcuna distribuzione di dati o elaborazione parallela e non utilizza RDD (quindi nessun attributo rdd). A differenza di Spark DataFrame fornisce funzionalità di accesso casuale.

Spark DataFrame è strutture dati distribuite che utilizzano RDD dietro le quinte. È possibile accedervi utilizzando SQL raw (sqlContext.sql) o SQL like API (df.where(col("foo") == "bar").groupBy(col("bar")).agg(sum(col("foobar")))). Non c'è accesso casuale ed è immutabile (nessun equivalente di Pandas inplace). Ogni trasformazione restituisce un nuovo DataFrame.

Se questo non è possibile, c'è qualcuno che può fornire un esempio di utilizzo Spark DF

Non

davvero. È di gran lunga argomento di ampio respiro per SO. Spark ha una documentazione davvero buona e Databricks fornisce alcune risorse aggiuntive. Per cominciare si controlla questi:

+0

'spDF.show()' non è definito al momento si chiama nello script – redress