Я пытаюсь запустить MLlip в Pyspark для прогнозирования цены, и я использую фрейм данных с такой схемой:
[('cut', 'string'),
('color', 'string'),
('clarity', 'string'),
('carat', 'double'),
('table', 'int'),
('x', 'double'),
('y', 'double'),
('z', 'double'),
('price', 'int')]
, поэтому после определения категориальных и числовых столбцов:
`categ_col= ['cut', 'color' ,'clarity']
num_col= ['carat','table', 'x', 'y', 'z']``
В приведенном ниже сценарии I:
- Сначала используйте StringIndexer для преобразования строковых / текстовых значений в числовые значения, а затем OneHotEncoderEstimator
- Spark MLLibto, чтобы преобразовать каждое Stringindexed или преобразованные значения в One Hot Encoded значения.
- VectorAssembler используется для объединения всех объектов в один вектор из нескольких столбцов, содержащих тип double
Также добавление каждого шага процесса в массив этапов
`from pyspark.ml.feature import StringIndexer, OneHotEncoderEstimator,
VectorAssembler
stages = []
for catcol in categ_col:
stringIndexer = StringIndexer(inputCol = catcol, outputCol = catcol + 'Index')
OHencoder = OneHotEncoderEstimator(inputCols=[stringIndexer.getOutputCol()], outputCols=[catcol + "_catVec"])
stages += [stringIndexer, OHencoder]
assemblerInputs = [c + "_catVec" for c in categ_col] + num_col
Vectassembler = VectorAssembler(inputCols=assemblerInputs, outputCol="features")
stages += [Vectassembler]`
``
, когда я перешел к следующему шагу:
`from pyspark.ml import Pipeline
cols = mllipdf.columns
pipeline = Pipeline(stages = stages)
pipelineModel = pipeline.fit(mllipdf)
mllipdf = pipelineModel.transform(mllipdf)
selectedCols = ['features']+cols
mllipdf = mllipdf.select(selectedCols)
pd.DataFrame(mllipdf.take(5), columns=mllipdf.columns)`
Я получил ошибку в коде mllipdf = pipelineModel.transform(mllipdf)" line saying "IllegalArgumentException: 'Field "cut_catVec" does not exist.\nAvailable fields: cut, color, clarity, carat, table, x, y, z, price, clarityIndex, clarity_catVec'
не уверен, что здесь происходит