首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Spark转换为具有不同字段名的DS

将Spark转换为具有不同字段名的DS
EN

Stack Overflow用户
提问于 2021-11-01 19:54:06
回答 2查看 320关注 0票数 3

我想将一个星火数据转换成一个具有不同字段名的POJO数据集。我有一个字段的数据格式:namedate_of_birth,其中它们的类型是StringTypeDateType

和一个POJO:

代码语言:javascript
运行
复制
public class Person implements Serializable {
    private String name;
    private Date dateOfBirth;
}

我使用以下代码成功地将其转换为dataset:

代码语言:javascript
运行
复制
Encoder<Person> personEncoder =  Encoders.bean(Person.class); 
Dataset<Person> personDS = result.as(personEncoder);
List<Person> personList = personDS.collectAsList();

只有当我将dataframe的列名在此之前更改为Person POJO的列名时。有没有办法让斯派克从POJO那边在田野之间映射?

我想过Gson的@SerializedName(“date_of_birth”),但它没有影响任何事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-02 11:22:07

如果您有一个名称映射(比如在Map中),您可以使用它在将dataframe转换为dataset之前重命名这些列。

它可以写成这样:

代码语言:javascript
运行
复制
// I create the map, but it could be read from a config file for instance
Map<String, String> nameMapping = new java.util.HashMap<>();
nameMapping.put("id", "name");
nameMapping.put("date", "dateOfBirth");

Column[] renamedColumns = nameMapping
                .entrySet()
                .stream()
                .map(x -> col(x.getKey()).alias(x.getValue()))
                .collect(Collectors.toList())
                .toArray(new Column[0]);

result.select(renamedColumns).as(personEncoder)
票数 1
EN

Stack Overflow用户

发布于 2021-11-02 19:50:07

我不知道具体的注释。然而,这是我解决它的方法。

我会用我想要的形状创建一个特定的dataframe,然后导出它。

看起来应该是:

代码语言:javascript
运行
复制
Dataset<Row> exportDf = df
    .withColumn("dateOfBirth",
        col("date_of_birth").cast(DataTypes.StringType))
    .drop("date_of_birth");

我编写的完整示例可以在这里找到:https://github.com/jgperrin/net.jgp.labs.spark/tree/master/src/main/java/net/jgp/labs/spark/l999_scrapbook/l002

备注:

我假设代码中的Dataset<Row>.

  • I是用于约会的字符串,因为result对于将日期转换为POJO中的字符串有点敏感。如果您在这个问题上需要帮助,请创建另一个这样的问题,我将很高兴地查看它。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69802146

复制
相关文章

相似问题

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