首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python语言中从Spark DataFrame创建labeledPoints

在Python语言中从Spark DataFrame创建labeledPoints
EN

Stack Overflow用户
提问于 2015-09-14 09:29:26
回答 1查看 15.6K关注 0票数 14

我应该使用python中的哪个.map()函数从spark数据帧创建一组labeledPoints?如果标签/结果不是第一列,但我可以引用它的列名'status‘,那么表示法是什么?

我使用这个.map()函数创建Python dataframe:

代码语言:javascript
运行
复制
def parsePoint(line):
    listmp = list(line.split('\t'))
    dataframe = pd.DataFrame(pd.get_dummies(listmp[1:]).sum()).transpose()
    dataframe.insert(0, 'status', dataframe['accepted'])
    if 'NULL' in dataframe.columns:
        dataframe = dataframe.drop('NULL', axis=1)  
    if '' in dataframe.columns:
        dataframe = dataframe.drop('', axis=1)  
    if 'rejected' in dataframe.columns:
        dataframe = dataframe.drop('rejected', axis=1)  
    if 'accepted' in dataframe.columns:
        dataframe = dataframe.drop('accepted', axis=1)  
    return dataframe 

在reduce函数重新组合所有Pandas数据帧之后,我将其转换为Spark数据帧。

代码语言:javascript
运行
复制
parsedData=sqlContext.createDataFrame(parsedData)

但是现在如何在Python语言中创建labledPoints呢?我猜它可能是另一个.map()函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-14 12:29:34

如果您已经有了数字特性,并且不需要额外的转换,那么您可以使用VectorAssembler来组合包含独立变量的列:

代码语言:javascript
运行
复制
from pyspark.ml.feature import VectorAssembler

assembler = VectorAssembler(
    inputCols=["your", "independent", "variables"],
    outputCol="features")

transformed = assembler.transform(parsedData)

接下来,您可以简单地映射:

代码语言:javascript
运行
复制
from pyspark.mllib.regression import LabeledPoint
from pyspark.sql.functions import col

(transformed.select(col("outcome_column").alias("label"), col("features"))
  .rdd
  .map(lambda row: LabeledPoint(row.label, row.features)))

从Spark2.0开始,mlmllib API不再兼容,后者正在走向弃用和移除。如果你仍然需要它,你必须将ml.Vectors转换成mllib.Vectors

代码语言:javascript
运行
复制
from pyspark.mllib import linalg as mllib_linalg
from pyspark.ml import linalg as ml_linalg

def as_old(v):
    if isinstance(v, ml_linalg.SparseVector):
        return mllib_linalg.SparseVector(v.size, v.indices, v.values)
    if isinstance(v, ml_linalg.DenseVector):
        return mllib_linalg.DenseVector(v.values)
    raise ValueError("Unsupported type {0}".format(type(v)))

和map:

代码语言:javascript
运行
复制
lambda row: LabeledPoint(row.label, as_old(row.features)))
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32556178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档