Невозможно травить склеарн трубопровод в Databricks - PullRequest
1 голос
/ 17 июня 2019

Я пытался протравить склеарн конвейер в кирпичах данных.но это закончилось ошибкой.Тот же код прекрасно работал в локальном ноутбуке jupyter

Пробовал также с joblib.Но возникает та же ошибка

#Build the baseline for Random forest
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn import preprocessing
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.ensemble import RandomForestClassifier

#Build Baseline
class Select_Column(BaseEstimator, TransformerMixin):
    def __init__(self, column_name):  # no *args or **kargs
        self.column_name = column_name
    def fit(self, X, y=None):
        return self  # nothing else to do

    def transform(self, X, ):
        return X[self.column_name].values.reshape(-1, 1)


class Text_features(BaseEstimator, TransformerMixin):
    def __init__(self, column_name):  # no *args or **kargs
        self.column_name = column_name

    def fit(self, X, y=None):
        return self  # nothing else to do

    def transform(self, X, ):
        return X[self.column_name].values.astype('U')

class Binarized_features(BaseEstimator, TransformerMixin):
    def __init__(self, column_name):  # no *args or **kargs
                self.column_name = column_name

    def fit(self, X, y=None):
            return self  # nothing else to do

    def transform(self, X, ):
            return preprocessing.Binarizer(threshold=0.0).transform(X[self.column_name].values.reshape(-1, 1))



full_pipeline = FeatureUnion(transformer_list=[
            ("AB", Select_Column(["ABC"])),
            ("AC", Select_Column(["ACD"])),
            ("SCc", Select_Column(["SCc"])),
            ("Text_Features1", Pipeline([
                ('selector', Text_features(column_name='Text')),
                ('tfidf_vectorizer', TfidfVectorizer(min_df=1, 
                                     norm='l2', 
                                     max_features=100000, 
                                     smooth_idf=True, 
                                     use_idf=True, 
                                     ngram_range=(1,2)))  # TFID
            ])) 
        ])

vectorizer = full_pipeline.fit(data)
import pickle
pickle.dump(vectorizer_fit, open("vector.pickle", 'wb'))

Приведенный выше код вызывает ошибку в кирпичах данных, PicklingError: Can't pickle: поиск атрибута Select_Column на main не удалось.

НоТот же код отлично работал в локальном ноутбуке jupyter

Databricks python Версия 3.5.2

...