преобразование кадра данных pyspark в помеченный точечный объект

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

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

mycode:

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

Кажется, это не работает, новая искра, поэтому любые предложения будут полезны.


person data_person    schedule 11.08.2016    source источник
comment
Возможный дубликат ошибки в помеченном точечном объекте pyspark   -  person    schedule 12.08.2016
comment
@LostInOverflow нет, это из кадра данных, а это из RDD.   -  person data_person    schedule 12.08.2016
comment
@LostInOverflow, можете ли вы предложить мне что-нибудь для этого?   -  person data_person    schedule 12.08.2016
comment
Вы смотрели на этот вопрос? вопрос stackoverflow о spark/labeledpoint   -  person itza    schedule 12.08.2016


Ответы (1)


Если вы хотите получить 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])]

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

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

person Alberto Bonsanto    schedule 12.08.2016