2016-05-29 10 views
5

Ich versuche, Pandas DF in Spark one zu konvertieren. DF Kopf:Konvertieren von Pandas Dataframe in Spark Datenframe Fehler

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 

Code:

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

Und ich habe einen Fehler:

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

Meine erste Annahme ist, dass die Datei sowohl Zahlen als auch Strings in einer Spalte enthält und Spark darüber verwirrt. Allerdings sollte es beim Importieren von Pandas gehandhabt werden. –

+0

hat Ihr DF Spaltennamen? – MaxU

+0

Ja hat es. Sollte ich sie deaktivieren? –

Antwort

9

Sie müssen machen Stellen Sie sicher, dass Ihre pandas-Dataframe-Spalten für den Typ geeignet sind, den func ableitet. Wenn Ihr Pandas Datenrahmen enthält so etwas wie:

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 

Und Sie bekommen diesen Fehler Versuch:

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

Nun, stellen Sie sicher, .astype(str) ist eigentlich die Art Sie die Spalten sein wollen. Wenn der zugrunde liegende Java-Code versucht, den Typ von einem Objekt in Python abzuleiten, verwendet er im Grunde einige Beobachtungen und macht eine Vermutung, wenn diese Schätzung nicht auf alle Daten in den Spalten zutrifft, die er von Pandas zu konvertieren versucht funken es wird scheitern.

+0

Ich fand das sehr hilfreich. Follow-up-Frage: Als ich diese Schritte für meinen eigenen Datenrahmen durchging und verfolgte, sah ich keine Änderung an der pd.info(). Wie genau verändert sich der Datenrahmen selbst? Wie kann ich überprüfen, ob sich der Pandas DataFrame nach der Verwendung von .astype (str) geändert hat? – EntryLevelR

2

Ich habe versucht, diese mit Ihren Daten und es funktioniert:

%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() 
Verwandte Themen