gpt4 book ai didi

java - Spark 在 UDF Java 中获取 WrappedArray> 的值

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:12 25 4
gpt4 key购买 nike

我的 Dataset<Row> 中有一列包含 WrappedArray<WrappedArray<Double>> .我将此专栏传递给 UDF提取其中一个值。

我将如何访问这个嵌套结构中的 double ?

我想做这样的事情:

sparkSession.udf().register(ADD_START_TOTAL, (UDF1<WrappedArray<WrappedArray<Double>>, Double>) (totals) -> totals[0][1], DataTypes.DoubleType);

这是我调用 Dataset.show() 时列的外观示例方法我的数据集如下所示。

[WrappedArray(2.0...

编辑:找到这篇文章 How to cast a WrappedArray[WrappedArray[Float]] to Array[Array[Float]] in spark (scala)但不确定如何将其翻译成 Java。

最佳答案

考虑你的 Dataset<Row> ds1value具有以下架构的列

root
|-- value: array (nullable = true)
| |-- element: array (containsNull = true)
| | |-- element: double (containsNull = false)

定义你的 UDF1功能如下。

static UDF1<WrappedArray<WrappedArray<Double>>, List<Double>> getValue = new UDF1<WrappedArray<WrappedArray<Double>>, List<Double>>() {
public List<Double> call(WrappedArray<WrappedArray<Double>> data) throws Exception {
List<Double> doubleList = new ArrayList<Double>();
for(int i=0; i<data.size(); i++){
doubleList.addAll(JavaConversions.seqAsJavaList(data.apply(i)));
}
return doubleList;
}
}

现在注册并调用UDF1功能如下。

import static org.apache.spark.sql.functions.col;
import static org.apache.spark.sql.functions.callUDF;
import scala.collection.JavaConversions;

// register UDF
spark.udf().register("getValue", getValue, DataTypes.createArrayType(DataTypes.DoubleType));

// Call UDF
Dataset<Row> ds2 = ds1.select(col("*"), callUDF("getValue", col("value")).as("udf-value"));
ds2.show(false);

关于java - Spark 在 UDF Java 中获取 WrappedArray<WrappedArray<Double>> 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45724644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com