如何将整行作为参数传递给Spark(Java)中的UDF并返回具有更改列值的同一行?

时间:2018-05-02 02:57:32

标签: java apache-spark user-defined-functions apache-spark-dataset

我的用例是,一个spark UDF将一行作为输入,并根据在哈希映射广播中生成的一些动态条件返回具有更改列的相同行。所有UDF必须做的是从HashMap获取列,并使用指定的条件对其进行更改,并返回一个新行,其中包含来自输​​入行的一些现有值以及从广播HashMap条件派生的一些更新值。如果不是,则按原样返回输入行。 我不确定如何在整行上调用此UDF以及UDF如何根据其名称选择某个动态列并应用条件。 既然这是一个动态的通用udf,我不能自定义StrutType,它必须是动态的

so My data looks like, where a,b,c and d are column names
a  |  b  |  c  |  d  |
12 |  ac | qa  |  rt |

地图看起来像这样

a -> a*2+b
b -> c+d

因此,a和b中的所有值都应根据地图值进行更改。此地图是广播的,并且是动态的。该函数必须能够接收任何行并读取地图并进行相应的操作 所以我期待输出就像

a    |  b    |  c  |  d  |
24ac |  qart | qa  |  rt |


 and the next dataset can be 
    q  |  p  |  c  |  d  |
    0  |  !@ |  R% |  qa |

地图将如下所示

q -> q^2+2
c -> q+p+c+d

所以我期待输出就像

q    |  p    |  c       |  d  |
2    |  !@   | 0!@R%qa  |  rt |

所有动态处理

0 个答案:

没有答案