2016-08-13 3 views
-1

私はいつもこのエラーを受け取ります: AnalysisException:データ型の不一致により、 "部分文字列(l、1、-1)"を解決できません:引数1は(文字列またはバイナリ) l 'は配列型です;; "sparkでLabeledPointを作成できない

l [0]は文字列であり、arg 1に一致するため、かなり混同しています。 dataframeには 'value'という名前の列が1つしかありません。 そして、このオリジナルのデータフレームをオブジェクトLabeledPointの別のデータフレームに変換したいと思います。最初の要素は 'label'に、その他の要素は 'features'になります。

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

あなたは、私はそれを理解することはできませんあなたの質問を向上させる必要があります。 –

答えて

1

DataframeでLabeledPointを作成するにはどうすればよいと思いますか?だから、次のことができます。

デフ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

ありがとうございます。この方法は完全に機能します。しかし、私はまだudfを使ってエラーが出るのはなぜか分かりません。 – Siyao

+0

@Siyao udfのパラメータが正しくありません – kinkajou

関連する問題