首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RobustScaler in PySpark

RobustScaler in PySpark
EN

Stack Overflow用户
提问于 2020-01-24 10:45:42
回答 1查看 830关注 0票数 4

我想使用RobustScaler对数据进行预处理。在滑雪板中,可以在

代码语言:javascript
复制
sklearn.preprocessing.RobustScaler

。但是,我使用的是吡咯烷酮,所以我尝试用以下方式导入它:

代码语言:javascript
复制
 from pyspark.ml.feature import RobustScaler

但是,我收到以下错误:

代码语言:javascript
复制
ImportError: cannot import name 'RobustScaler' from 'pyspark.ml.feature' 

正如帕特所指出的,RobustScaler仅在pyspark 3中实现,我试图将其实现为:

代码语言:javascript
复制
class PySpark_RobustScaler(Pipeline):
    def __init__(self):
        pass

    def fit(self, df):
        return self

    def transform(self, df):
        self._df = df
        for col_name in self._df.columns:
            q1, q2, q3 = self._df.approxQuantile(col_name, [0.25, 0.5, 0.75], 0.00)
            self._df = self._df.withColumn(col_name, 2.0*(sf.col(col_name)-q2)/(q3-q1))
        return self._df

arr = np.array(
            [[ 1., -2.,  2.],
            [ -2.,  1.,  3.],
            [ 4.,  1., -2.]]
          )

rdd1 = sc.parallelize(arr)
rdd2 = rdd1.map(lambda x: [int(i) for i in x])
df_sprk = rdd2.toDF(["A", "B", "C"])
df_pd = pd.DataFrame(arr, columns=list('ABC'))

PySpark_RobustScaler().fit(df_sprk).transform(df_sprk).show()
print(RobustScaler().fit(df_pd).transform(df_pd))

然而,我发现为了获得同样的学习结果,我必须将结果乘以2。此外,我担心如果一个列有许多接近于零的值,那么q3-q1的四分位数范围就会变得太小,结果就会发散,从而产生空值。

有人对如何改进它有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-11 11:04:12

这一特性已经在最近火花放电版本中发布。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59894899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档