2016-08-13 8 views
-1

Ich erhalte immer diesen Fehler: AnalysisException: u "kann" substring (l, 1, -1) 'aufgrund des Datentyps Mismatch nicht auflösen: Argument 1 erfordert jedoch (Zeichenfolge oder Binär) Typ' l 'ist vom Array-Typ; "Funke kann LabeledPoint nicht erstellen

Ziemlich verwirrt, da l [0] eine Zeichenkette ist und mit arg 1 übereinstimmt. Datenrahmen hat nur eine Spalte mit dem Namen 'value', die eine durch Kommas getrennte Zeichenkette ist. Und ich möchte diesen ursprünglichen Datenrahmen in einen anderen Datenrahmen des Objekts LabeledPoint konvertieren, wobei das erste Element "Label" und die anderen "Features" sein sollen.

from pyspark.mllib.regression import LabeledPoint 

def parse_points(dataframe): 

    df1=df.select(split(dataframe.value,',').alias('l')) 
    u_label_point=udf(LabeledPoint) 
    df2=df1.select(u_label_point(col('l')[0],col('l')[1:-1])) 
    return df2 

parsed_points_df = parse_points(raw_data_df) 
+0

Sie Ihre Frage verbessern sollte, kann ich es nicht verstehen. –

Antwort

1

Ich denke, Sie, was LabeledPoint in Dataframe erstellen. So können Sie:

def parse_points (df):

df1=df.select(split(df.value,',').alias('l')) 
df2=df1.map(lambda seq: LabeledPoint(float(seq[0][0]),seq[0][1:])) # since map applies lambda in each tuple 
return df2.toDF() #this will convert pipelinedRDD to dataframe 

parsed_points_df = parse_points (raw_data_df)

+0

Danke. Diese Methode funktioniert perfekt. Allerdings verstehe ich immer noch nicht, warum die Verwendung von udf einen Fehler verursacht. – Siyao

+0

@Siyao der Parameter in udf ist nicht korrekt – kinkajou

Verwandte Themen