在数据集 Apache Spark 上应用转换



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

上下文:Dataset<Row> old包含 2 列ab。我想返回一个包含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 [列] 的值作为参数并返回日志值。

希望这工作正常

相关内容

  • 没有找到相关文章

最新更新