将pyspark数据帧转换为标记的点对象

时间:2016-08-11 22:02:41

标签: python apache-spark pyspark apache-spark-mllib pyspark-sql

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: ]))

它似乎不起作用,因为任何建议都会有所帮助。

1 个答案:

答案 0 :(得分: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:])

定义此类功能后,mapDataFrame 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,您将获得两列(功能和标签)。