我正在使用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)
最佳答案
您可以做的是创建一个将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/