2016-05-29 4 views
5

Sto provando a convertire Pandas DF in Spark uno. testa DF:Conversione del dataframe di Pandas in errore Spark Dataframe

10000001,1,0,1,12:35,OK,10002,1,0,9,f,NA,24,24,0,3,9,0,0,1,1,0,0,4,543 
10000001,2,0,1,12:36,OK,10002,1,0,9,f,NA,24,24,0,3,9,2,1,1,3,1,3,2,611 
10000002,1,0,4,12:19,PA,10003,1,1,7,f,NA,74,74,0,2,15,2,0,2,3,1,2,2,691 

Codice:

dataset = pd.read_csv("data/AS/test_v2.csv") 
    sc = SparkContext(conf=conf) 
    sqlCtx = SQLContext(sc) 
    sdf = sqlCtx.createDataFrame(dataset) 

E ho ottenuto un errore:

TypeError: Can not merge type <class 'pyspark.sql.types.StringType'> and <class 'pyspark.sql.types.DoubleType'> 
+2

La mia prima ipotesi è che il file contenga sia numeri che stringhe in una colonna e Spark si confonde con esso. Tuttavia, dovrebbe essere gestito da Pandas durante l'importazione. –

+0

il tuo DF ha nomi di colonne? – MaxU

+0

Sì, lo ha. Dovrei disabilitarli? –

risposta

9

È necessario effettuare certo che le colonne di dataframe dei panda siano appropriate per il tipo di scintilla che si sta deducendo. Se il vostro dataframe panda elenca qualcosa di simile:

pd.info() 
<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 5062 entries, 0 to 5061 
Data columns (total 51 columns): 
SomeCol     5062 non-null object 
Col2      5062 non-null object 

e si stanno ottenendo quell'errore prova:

df[['SomeCol', 'Col2']] = df[['SomeCol', 'Col2']].astype(str) 

Ora, assicurarsi .astype(str) è in realtà il tipo che si desidera quelle colonne che siano. Fondamentalmente, quando il codice Java sottostante cerca di inferire il tipo da un oggetto in python usa alcune osservazioni e fa un'ipotesi, se quell'ipotesi non si applica a tutti i dati nella/e colonna/e sta tentando di convertire da panda a scintilla fallirà.

+0

Ho trovato questo molto utile. Domanda di follow-up: quando ho seguito e seguito questi passaggi per il mio dataframe, non ho visto alcuna modifica al file pd.info(). Come cambia esattamente il dataframe stesso? Come posso verificare se il DataFrame dei panda è cambiato dopo aver utilizzato .astype (str)? – EntryLevelR

2

Ho provato questo con i tuoi dati e si sta lavorando:

%pyspark 
import pandas as pd 
from pyspark.sql import SQLContext 
print sc 
df = pd.read_csv("test.csv") 
print type(df) 
print df 
sqlCtx = SQLContext(sc) 
sqlCtx.createDataFrame(df).show()