Когда надгробный камень слит с данными в уплотнении, данные будут удалены с диска. Когда это происходит, зависит от скорости добавления новых данных и стратегии уплотнения. Надгробные камни не очищаются до тех пор, пока gc_grace_seconds не предотвратит восстановление данных (убедитесь, что ремонт завершен в течение этого периода времени).
Если вы много переопределяете или удаляете данные и не согласны с большим количеством устаревших данных на диске вы, вероятно, должны использовать LeveledCompactionStrategy
вместо этого (я бы порекомендовал всегда использовать LCS при использовании ssds). Это может потребовать long время для того, чтобы самые большие sstables были уплотнены при использовании STCS. STCS больше подходит для постоянного добавления данных (например, журналов или событий). Если записи истекают с течением времени, и вы сильно полагаетесь на TTL, вы, вероятно, захотите использовать стратегию с временным окном.
Вы должны применять FunctionTransformer
последовательно. Попробуйте это!
def create_pipeline(df):
all_but_recency = ['monetary', 'frequency1','frequency2']
# Preprocess
# Preprocess
preprocessor1 = ColumnTransformer([('log', FunctionTransformer(np.log), all_but_recency)],'passthrough')
preprocessor2 = ColumnTransformer([('standardize', preprocessing.StandardScaler(), all_but_recency)],'passthrough' )
# Pipeline
estimators = [('preprocess1', preprocessor1),('standardize', preprocessor2)]
pipe = Pipeline(steps=estimators)
print(pipe.set_params().fit_transform(df).shape)
рабочий пример
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import Pipeline
from sklearn import preprocessing
iris = load_iris()
X, y = iris.data, iris.target
df= pd.DataFrame(X,columns = iris.feature_names)
all_but_one = [0,1,2]
# Preprocess
preprocessor1 = ColumnTransformer([('log', FunctionTransformer(np.log), all_but_one)],'passthrough')
preprocessor2 = ColumnTransformer([('standardize', preprocessing.StandardScaler(), all_but_one)],'passthrough' )
# Pipeline
estimators = [('preprocess1', preprocessor1),('scalling', preprocessor2)]
pipe = Pipeline(steps=estimators,)
pipe.fit_transform(df)