【问题标题】:Optimal way to add functionality to classes - PySpark向类添加功能的最佳方式 - PySpark
【发布时间】:2020-07-09 19:05:00
【问题描述】:

有一阵子,我一直在寻找如何为 PySpark DF 一次重命名多个列,结果遇到了如下情况:

import pyspark
def rename_sdf(df, mapper={}, **kwargs_mapper):
    # Do something
    # return something

pyspark.sql.dataframe.DataFrame.rename = rename_sdf

我对通过赋值语句将方法添加到 pyspark.DataFrame 类的最后一点感兴趣。 问题是,我正在创建一个 Github 存储库来存储我所有的函数和 ETL,我认为如果我可以应用上面显示的逻辑,那么创建一个 __init__.py 模块将非常容易,其中我实例化了我的所有功能,例如:

from funcs import *
pyspark.sql.dataframe.DataFrame.func1 = func1
pyspark.sql.dataframe.DataFrame.func2 = func2
.
.
.
pyspark.sql.dataframe.DataFrame.funcN = funcN

我想我的问题是:

这有用吗?对性能有好处吗?这是错的吗?它不是 Pythonic 的吗?

【问题讨论】:

    标签: python pandas dataframe oop pyspark


    【解决方案1】:

    这绝对可以在某些情况下使用。我建议将此代码放入函数中,以便用户必须显式调用它。

    import funcs
    
    
    def wrap_pyspark_dataframe():
        pyspark.sql.dataframe.DataFrame.func1 = funcs.func1
        pyspark.sql.dataframe.DataFrame.func2 = funcs.func2
        ...
    

    【讨论】:

    • 太棒了!谢谢。你知道它是否会惩罚性能吗?还是一样?
    • 这取决于您要替换的内容。如果你用慢代码替换高度优化的代码,显然会有很大的不同。方法本身的重新分配可以忽略不计。
    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2022-11-18
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    相关资源
    最近更新 更多