我想遍历spark DataFrame
中一列的内容,并在满足特定条件的情况下更正单元格中的数据
+-------------+
|column_title |
+-------------+
+-----+
|null |
+-----+
+-----+
|0 |
+-----+
+-----+
|1 |
+-----+
让我们说我想在column的值为null时显示其他内容,我尝试使用
Column.when()
DataSet.withColumn()
但是我找不到正确的方法,我认为没有必要转换为RDD并对其进行迭代。
答案 0 :(得分:2)
您可以使用when
和equalTo
或when
和isNull
。
Dataset<Row> df1 = df.withColumn("value", when(col("value").equalTo("bbb"), "ccc").otherwise(col("value")));
Dataset<Row> df2 = df.withColumn("value", when(col("value").isNull(), "ccc").otherwise(col("value")));
如果您只想替换空值,则也可以使用na
和fill
。
Dataset<Row> df3 = df.na().fill("ccc");
答案 1 :(得分:0)
执行此操作的另一种方法是使用UDF。
创建UDF。
private static UDF1 myUdf = new UDF1<String, String>() {
public String call(final String str) throws Exception {
// any condition or custom function can be used
return StringUtils.rightPad(str, 25, 'A');
}
};
在SparkSession中注册UDF。
sparkSession.udf().register("myUdf", myUdf, DataTypes.StringType);
在数据集上应用udf。
Dataset<Row> dataset = dataset.withColumn("city", functions.callUDF("myudf", col("city")));
希望有帮助!