我正在使用Java处理Apache Spark中的Dataset<Row>
,需要对此数据集中的所有列进行几次数学转换。基本上,转换之一是获取此数据集中存储的所有值的日志,并且仍然返回Dataset<Row>
。我清楚地看到如何在RDD的map
函数中做到这一点,但是如何在Dataset<Row>
中做到这一点呢?
上下文:Dataset<Row> old
包含 2 列a
和b
。我想返回一个包含a = log(a)
和b = log(b)
列的新Dataset<Row> new
你可以做的是创建一个方法,该方法将类型为a[column]和b[column]的值作为参数并返回日志值。
假设列 A 和列 B 的类型为 long
public long getLog(long value){
// yourlogic to generate log
}
然后对数据集应用地图功能。在map函数下,您将获得值作为类型Row
应用getLong/getAs()
方法以获取相应的值,然后将此值传递给自定义日志计算方法,即 getLog
在我们的例子中返回结果值。
您可能需要为值 A 和 B 列返回Tuple2
或者您可以创建 spqrk sql 的用户定义函数udf
然后应用withcoumn
方法来应用udf
注意 udf 将取类型 a [列] 和 b [列] 的值作为参数并返回日志值。
希望这工作正常