如何取 RDD 的對數?我有一個val rdd: RDD[Double],我只想取它的對數。
這與this本質上是相同的問題,但提出的解決方案不起作用。我跑:
val rdd: RDD[Double] = <something>
val log_y = rdd.map(x => org.apache.commons.math3.analysis.function.Log(2.0, x))
我得到了錯誤:
error: object org.apache.commons.math3.analysis.function.Log is not a value
uj5u.com熱心網友回復:
正如我所看到的,math3中的這個類計算自然對數函式,它的作業原理如下:
new org.apache.commons.math3.analysis.function.Log().value(3)
res1: Double = 1.0986122886681098
它是 Spark 3.1.2 附帶的版本。
val log_y = rdd.map(x => org.apache.commons.math3.analysis.function.Log().value)
如果您使用的是相同的版本
這是這個類的代碼:
public class Log implements UnivariateDifferentiableFunction, DifferentiableUnivariateFunction {
/** {@inheritDoc} */
public double value(double x) {
return FastMath.log(x);
}
/** {@inheritDoc}
* @deprecated as of 3.1, replaced by {@link #value(DerivativeStructure)}
*/
@Deprecated
public UnivariateFunction derivative() {
return FunctionUtils.toDifferentiableUnivariateFunction(this).derivative();
}
/** {@inheritDoc}
* @since 3.1
*/
public DerivativeStructure value(final DerivativeStructure t) {
return t.log();
}
}
如您所見,您需要創建一個實體,然后value屬性是實際執行 log 函式的內容。盡管您可以在地圖之外創建一個實體并將其標記為瞬態以避免為每個 RDD 元素創建一個新實體。或者你可以在 mapPartition 函式中使用這個類來為每個磁區只創建一個實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/459738.html
