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: ]))这似乎不起作用,因此,任何建议都是有益的。
发布于 2016-08-12 11:21:50
如果您想获得一个RDD,您需要创建一个函数来解析Array of 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,您将获得两列(特性和标签)。
https://stackoverflow.com/questions/38906803
复制相似问题