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

它似乎不工作,新的火花,因此任何建议将是有帮助的。

如果您想获得RDD,您需要创建一个函数来解析StringArray

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)

实现此check my功能。

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,您将获得两列(特征和标签)

相关内容

  • 没有找到相关文章

最新更新