将变量列传递到PySpark UDF

问题描述

我的枚举如下-

>>> from enum import Enum
 
>>> class Constants(Enum):
        A = 4
        B = 8
        C = 10

我的数据框如下-

>>> data = [(1,2,3,4,0),(3,5,7,8,0)]
>>> df = sqlContext.createDataFrame(data,["A","B","C","D","result"])
>>> df.show()
+---+---+---+---+------+
|  A|  B|  C|  D|result|
+---+---+---+---+------+
|  1|  2|  3|  4|     0|
|  3|  5|  7|  8|     0|
+---+---+---+---+------+

我想拥有一个通用的UDF,该UDF从输入df获取可变列值,并将它们乘以其匹配的Enum值,最后将它们求和。例如,最终结果看起来像-

>>> df.show()
    +---+---+---+---+-----------------------+
    |  A|  B|  C|  D|       result          |
    +---+---+---+---+-----------------------+
    |  1|  2|  3|  4|  50 (4*1 + 8*2 + 10*3)| # D not passed to UDF since its not present in Enum class
    |  3|  5|  7|  8| 122 (4*3 + 8*5 + 10*7)|
    +---+---+---+---+-----------------------+

考虑到上述示例,我知道我可以将硬编码的列值传递给我的UDF,但是挑战是编写一个通用的UDF ,它接受可变数量的列和枚举,因为我不会总是这样知道分别在输入数据框和我的枚举中存在哪些列和值。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)