首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回Struct \多个列的Java Spark

返回Struct \多个列的Java Spark
EN

Stack Overflow用户
提问于 2017-07-07 18:20:51
回答 1查看 1.2K关注 0票数 1

我正在编写一个UDAF聚合函数,我想返回一个数据类型,它要么是一个具有列名的结构(例如,开始和结束都是长类型),要么是2列。

在计算函数中,尝试返回一个映射类型和一个数组,但这不是我所期望的。

我很想知道这件事。谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-07-04 10:19:00

最简单的方法是在一个字段中返回一个包含值的列表,然后在几个列中展开它。

在这里,您可以读到一个示例,其中的联非新议程试图返回两个Integer列:

重要代码部分

代码语言:javascript
复制
public YourUDAFName(someParams) {
    [...]
    _returnDataType = DataTypes.createArrayType(DataTypes.IntegerType);
}
[...]
@Override
public Object evaluate(Row buffer) {
    List<Integer> output = new ArrayList<>();
    output.add(1); //Here put your logical...
    output.add(5); // "
    return output;    
}

例如使用..。

代码语言:javascript
复制
Dataset<Row> ds = getYourDatasetHere();
YourUDAFName udaf = new YourUDAFName(someParams);
ds.groupBy("yourGroupByKey")
.agg(udaf .apply(
    col("someColumnFromDs"),
    col("someOtherColumn")).as("columnWithList"));

// Here we expand the "columnWithList"...
List<Column> newColumns = new ArrayList<>();
for (int i = 0; i < numElementInTheList; i++) {
    ds = ds.withColumn("nameOfYourExpandedColumn", ds.col("outputByIntervals").getItem(i));
}
ds.show();

我希望这对你有帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44977368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档