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 |
有没有更好的解决方案在数据集中添加此列而不是创建两个数据集并执行联合?
使用when otherwise和可以完成相同的操作withColumn。
ds1.withColumn("is_age_null" , when(col("age") === "null", lit(true)).otherWise(lit(false))).show()
这将得到与结果相同的结果ds4。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。