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