gpt4 book ai didi

java - WrappedArray 的 WrappedArray 到 java 数组

转载 作者:行者123 更新时间:2023-12-02 14:24:13 25 4
gpt4 key购买 nike

我有一个类型为set的列,我使用spark Dataset API的collect_set(),它返回一个包装数组的包装数组。我想要来自嵌套包装数组的所有值的单个数组。我怎样才能做到这一点?

例如。 Cassandra 表:

Col1  
{1,2,3}
{1,5}

我正在使用 Spark 数据集 API。
row.get(0) 返回包装数组的包装数组。

最佳答案

假设您有Dataset<Row> ds其中有value专栏。

+-----------------------+
|value |
+-----------------------+
|[WrappedArray(1, 2, 3)]|
+-----------------------+

它具有以下架构

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

使用 UDF

定义UDF1像下面这样。

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

注册并调用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.IntegerType));

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

使用爆炸功能

import static org.apache.spark.sql.functions.col;
import static org.apache.spark.sql.functions.explode;

Dataset<Row> ds2 = ds.select(explode(col("value")).as("explode-value"));
ds2.show(false);

关于java - WrappedArray 的 WrappedArray 到 java 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45324530/

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