Создание labeledPoints из фрейма данных Spark в Python
что .map()
функция в python я использую для создания набора labeledPoints
из фрейма данных spark? Что такое обозначение, если метка / результат не является первым столбцом, но я могу ссылаться на его имя столбца "статус"?
Я создаю фрейм данных Python с этим .карте (функция):
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
я преобразую его в фрейм данных Spark после того, как функция reduce рекомбинировала все фреймы данных Pandas.
parsedData=sqlContext.createDataFrame(parsedData)
но теперь, как я могу создать labledPoints
от этого в В Python? Я предполагаю, что это может быть другой
1 ответов
если у вас уже есть числовые функции и которые не требуют дополнительных преобразований, вы можете использовать VectorAssembler
для объединения столбцов, содержащих независимые переменные:
from pyspark.ml.feature import VectorAssembler
assembler = VectorAssembler(
inputCols=["your", "independent", "variables"],
outputCol="features")
transformed = assembler.transform(parsedData)
Далее вы можете просто карту:
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)))
по состоянию на Spark 2.0 ml
и mllib
API больше не совместимы, и последний идет к устареванию и удалению. Если вам все еще нужно это, вам придется конвертировать ml.Vectors
to mllib.Vectors
.
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)))
и карта:
lambda row: LabeledPoint(row.label, as_old(row.features)))