2
df: 
[Row(split(value,,)=[u'21.0', u'1',u'2']),Row(split(value,,)=[u'22.0', u'3',u'4'])] 

как преобразовать каждую строку в DF в LabeledPoint объект, который состоит из метки и функций, где первое значение является меткой, а остальные 2 являются особенности в каждой строке.преобразования pyspark dataframe меченого точечного объекта

mycode: 

df.map(lambda row:LabeledPoint(row[0],row[1: ])) 

Это не похоже на работу, новое, чтобы исправить, поэтому любые предложения были бы полезными.

+0

Возможный дубликат [ошибка в помеченном объекте pyspark] (http://stackoverflow.com/questions/38887157/error-in-labelled-point-object-pyspark) –

+0

@LostInOverflow нет, это не так, это из dataframe, и это было из RDD. –

+0

@LostInOverflow может предложить вам что-то для этого? –

ответ

4

Если вы хотите получить RDD, вам необходимо создать функцию для анализа вашего Array из String.

a = sc.parallelize([([u'21.0', u'1',u'2'],),([u'22.0', u'3',u'4'],)]).toDF(["value"]) 
a.printSchema() 

#root 
#|-- value: array (nullable = true) 
#| |-- element: string (containsNull = true) 

Для достижения этой цели проверить свою функцию.

def parse(l): 
    l = [float(x) for x in l] 

    return LabeledPoint(l[0], l[1:]) 

После определения такой функции, map ваш DataFrame, чтобы map его внутренний RDD.

a.map(lambda l: parse(l[0])).take(2) 

# [LabeledPoint(21.0, [1.0,2.0]), LabeledPoint(22.0, [3.0,4.0])] 

Здесь вы можете найти published notebook где я тестировал все.

PD: Если вы используете toDF, вы получите две колонки (функции и этикетку).

 Смежные вопросы

  • Нет связанных вопросов^_^