开发者社区> 问答> 正文

根据条件在spark数据集中添加列值

public class EmployeeBean implements Serializable {

private Long id;

private String name;

private Long salary;

private Integer age;

// getters and setters

}
相关的saprk代码:

SparkSession spark = SparkSession.builder().master("local[2]").appName("play-with-spark").getOrCreate();
List employees1 = populateEmployees(1, 10);

Dataset ds1 = spark.createDataset(employees1, Encoders.bean(EmployeeBean.class));
ds1.show();
ds1.printSchema();

Dataset ds2 = ds1.where("age is null").withColumn("is_age_null", lit(true));
Dataset ds3 = ds1.where("age is not null").withColumn("is_age_null", lit(false));

Dataset ds4 = ds2.union(ds3);
ds4.show();
相关产出:

DS1

age id name salary
null 1 dev1 11000
2 2 dev2 12000
null 3 dev3 13000
4 4 dev4 14000
null 5 dev5 15000

DS4

age id name salary is_age_null
null 1 dev1 11000 true
null 3 dev3 13000 true
null 5 dev5 15000 true
2 2 dev2 12000 false
4 4 dev4 14000 false

有没有更好的解决方案在数据集中添加此列而不是创建两个数据集并执行联合?

展开
收起
社区小助手 2018-12-19 16:24:03 1908 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    使用when otherwise和可以完成相同的操作withColumn。

    ds1.withColumn("is_age_null" , when(col("age") === "null", lit(true)).otherWise(lit(false))).show()
    这将得到与结果相同的结果ds4。

    2019-07-17 23:23:00
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载