将 pyspark 数据框转换为标记点对象
converting pyspark dataframe to labelled point object
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
你需要创建一个函数来解析你的 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])]
在这里你可以找到我测试所有内容的published notebook。
PD:如果您使用 toDF
,您将获得两列(特征和标签)。
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
你需要创建一个函数来解析你的 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])]
在这里你可以找到我测试所有内容的published notebook。
PD:如果您使用 toDF
,您将获得两列(特征和标签)。