14

sparkデータフレームから.map()一連のを作成するために使用するpythonの関数は何ですか? labeledPointsラベル/結果が最初の列ではないが、その列名「ステータス」を参照できる場合の表記法は?

この .map() 関数を使用して 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 

reduce 関数がすべての Pandas データフレームを再結合した後、Spark データフレームに変換します。

parsedData=sqlContext.createDataFrame(parsedData)

labledPointsしかし、これからPython でどのように作成すればよいでしょうか? 私はそれが別の.map()機能であると思いますか?

4

1 に答える 1

17

すでに数値機能があり、追加の変換を必要としない場合は、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.0mlmllibAPI の時点で互換性がなくなり、後者は非推奨と削除に向かっています。それでもこれが必要な場合は、に変換する必要がありml.Vectorsます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)))
于 2015-09-14T04:29:33.723 に答える