我正在使用Java在Apache Spark中处理Dataset<Row>,并且需要对该数据集中的所有列进行几次数学转换。基本上,转换之一是获取存储在此数据集中的所有值的日志,并且仍返回Dataset<Row>。我清楚地知道如何在RDD的map函数中执行此操作,但是如何在Dataset<Row>中执行此操作?

上下文:Dataset<Row> old包含2列ab。我想返回同时包含Dataset<Row> newa = log(a)列的新b = log(b)

最佳答案

您可以做的是创建一个将a [column]和b [column]类型的值作为参数并返回日志值的方法。

假设a和b列的类型为long

public long getLog(long value){
// yourlogic to generate log
}


然后将地图函数应用于数据集。在map函数下,您将获得类型为Row的值,应用apply getLong/getAs()方法以获取相应的值,然后将此值传递给自定义日志计算方法,即在我们的情况下为getLog然后返回结果值。

您可能需要同时为值a和b列返回Tuple2

或者您可以创建spqrk sql的udf用户定义函数,然后应用withcoumn方法来应用udf

注意udf将采用类型a [column]和b [column]的值作为参数,并返回日志值。

希望这项工作顺利

关于java - 在数据集Apache Spark上应用转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41458102/

10-11 07:42
查看更多