복붙노트

[PYTHON] Python의 Spark DataFrame에서 labeledPoints 만들기

PYTHON

Python의 Spark DataFrame에서 labeledPoints 만들기

파이썬에서 .map () 함수를 사용하면 스파크 데이터 프레임에서 labeledPoints 세트를 만들 수 있습니까? 레이블 / 결과가 첫 번째 열이 아니지만 열 이름 인 '상태'를 참조 할 수 있다면 표기법은 무엇입니까?

이 .map () 함수를 사용하여 파이썬 데이터 프레임을 만듭니다.

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 함수가 모든 팬더 데이터 프레임을 재결합 한 후에이를 Spark 데이터 프레임으로 변환합니다.

parsedData=sqlContext.createDataFrame(parsedData)

하지만 이제 어떻게 파이썬에서 labledPoints를 만들 수 있습니까? 나는 그것이 다른 .map () 함수일지도 모른다라고 추정한다?

해결법

  1. ==============================

    1.이미 숫자 형 기능이 있고 추가 변환이 필요하지 않은 경우 VectorAssembler를 사용하여 독립 변수가 포함 된 열을 결합 할 수 있습니다.

    이미 숫자 형 기능이 있고 추가 변환이 필요하지 않은 경우 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를 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)))
    
  2. from https://stackoverflow.com/questions/32556178/create-labeledpoints-from-spark-dataframe-in-python by cc-by-sa and MIT license