在数据集Apache Spark

时间:2017-01-04 07:09:28

标签: java apache-spark spark-dataframe

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

上下文:Dataset<Row> old包含2列ab。我想返回一个包含Dataset<Row> newa = log(a)

列的新b = log(b)

1 个答案:

答案 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]的值作为参数并返回日志值。

希望这项工作正常