如何从Spark DataSet中移除longitude字段值为0的记录?
移除Spark DataFrame中longitude字段值为0的行
当然有办法啦!你可以使用Spark DataFrame的filter()或者where()算子(这两个功能完全等价)来筛选掉longitude字段值为0的行。下面给你几种适配Java API的实现方式:
方法一:直接使用字符串表达式过滤
这种方式最直观,写SQL风格的条件字符串即可:
// 过滤掉longitude等于0的行 Dataset<Row> filteredJournyDF = journyDF.filter("longitude != 0"); // 或者用where,效果完全一致 Dataset<Row> filteredJournyDF = journyDF.where("longitude != 0");
方法二:使用Column对象构建类型安全条件
如果你想避免字符串拼写错误,更倾向于类型安全的写法,可以用col()方法获取列对象,再构建过滤逻辑:
import org.apache.spark.sql.functions; Dataset<Row> filteredJournyDF = journyDF.filter(functions.col("longitude").notEqual(0)); // 也可以用更简洁的neq()方法 Dataset<Row> filteredJournyDF = journyDF.filter(functions.col("longitude").neq(0));
额外提示:处理可能的null值
如果你的longitude字段存在null值,且不想误删这些null行,可以补充null判断条件:
// 保留longitude不为0且不为null的行 Dataset<Row> filteredJournyDF = journyDF.filter("longitude != 0 AND longitude IS NOT NULL"); // 对应Column写法 Dataset<Row> filteredJournyDF = journyDF.filter( functions.col("longitude").notEqual(0).and(functions.col("longitude").isNotNull()) );
过滤后的filteredJournyDF就是移除了所有longitude为0的行的数据集,直接用它进行后续处理就好啦~
内容的提问来源于stack exchange,提问作者Vikas Gite
相关产品推荐
相关产品推荐

