我在处理一个 Dataset<Row>
在apachespark中使用java,需要对这个数据集中的所有列进行一些数学转换。基本上,其中一个转换就是获取存储在这个数据集中的所有值的日志,并且仍然返回 Dataset<Row>
. 我清楚地知道如何在 map
在rdd中的函数,但如何在 Dataset<Row>
?
上下文: Dataset<Row> old
包含2列 a
以及 b
. 我想还一个新的 Dataset<Row> new
有两列 a = log(a)
以及 b = log(b)
1条答案
按热度按时间dl5txlt91#
您可以创建一个方法,将类型a[column]和类型b[column]的值作为参数并返回日志值。
假设a列和b列是long类型
然后在数据集上应用map函数。在map函数下,您将得到类型为的值
Row
应用getLong/getAs()
方法获取相应的值,然后将该值传递给您的自定义日志计算方法,即。getLog
在我们的例子中,返回结果值。你可能需要回去
Tuple2
对于值a和b列或者你可以创造
udf
spqrk sql的自定义函数然后应用withcoumn
要应用的方法udf
注意:udf将使用类型a[column]和类型b[column]的值作为参数并返回日志值。希望这工作顺利