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

Posted

技术标签:

【中文标题】将 pyspark 数据帧转换为标记的点对象【英文标题】:converting pyspark dataframe to labelled point object 【发布时间】:2016-08-11 22:02:40 【问题描述】:
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: ]))

它似乎不起作用,新的火花因此任何建议都会有所帮助。

【问题讨论】:

error in labelled point object pyspark的可能重复 @LostInOverflow 不,不是,这是来自数据帧,来自 RDD。 @LostInOverflow 你能给我一些建议吗? 你看过这个问题吗? *** question about spark/labelledpoint 【参考方案1】:

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

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

【讨论】:

以上是关于将 pyspark 数据帧转换为标记的点对象的主要内容,如果未能解决你的问题,请参考以下文章

将 numpy 数组的 rdd 转换为 pyspark 数据帧

如何将 json 转换为 pyspark 数据帧(更快的实现)[重复]

pySpark - 在插入数据库之前将整个数据框列转换为 JSON 对象

将列字典从不同的数据帧转换为数据帧:pyspark

将 PySpark 数据帧转换为 JSON,每列作为键

Pyspark 将 rdd 转换为具有空值的数据帧