Java Spark如何判断Map类型数据集列是否为空并过滤?
Java Spark 过滤Map类型列为空的数据集
在Java Spark中处理map<string,string>类型的列时,要过滤出该列为空的数据集,需要注意两种"空"的场景:Map本身为null,或者Map不为null但内部没有键值对(size为0)。你之前用的col("map_col").isEmpty()之所以可能不生效,是因为Spark的isEmpty()方法主要针对字符串、数组这类类型,对Map类型并不适用。
过滤出Map为空的数据集
直接组合两种空场景的判断条件即可:
import static org.apache.spark.sql.functions.*; // 过滤map_col为null 或者 空Map的行 Dataset<Row> dataset1 = dataset2.filter( col("map_col").isNull().or(size(col("map_col")).equalTo(0)) );
额外:过滤出包含有效值的Map数据集
如果需要反向过滤,保留Map非空且有键值对的行,可以用:
// 过滤map_col不为null 且 Map大小大于0的行 Dataset<Row> validMapDataset = dataset2.filter( col("map_col").isNotNull().and(size(col("map_col")).greaterThan(0)) );
检查Map内的具体键值有效性
如果要进一步检查Map中某个特定键是否存在且对应值不为空,可以这样写:
// 过滤出map_col包含"target_key"键,且对应值不为null的行 Dataset<Row> hasValidKeyValueDataset = dataset2.filter( col("map_col").getItem("target_key").isNotNull() );
内容的提问来源于stack exchange,提问作者Prashant Kumar Jha
相关产品推荐
相关产品推荐

