如何在不使用 spark-sql 干扰其他列的情况下验证 Dataframe 中的特定列?

How to validate particular column in a Dataframe without troubling other columns using spark-sql?

set.createOrReplaceTempView("input1");      
            
String look = "select case when length(date)>0 then 'Y' else 'N' end as date from input1"; 
Dataset<Row> Dataset_op = spark.sql(look); 
Dataset_op.show();

在上面的代码中,数据框 'set' 有 10 列,我已经对其中的一列进行了验证(即 'date')。它 return 单独的日期列。

我的问题是如何 return 单个数据框中所有具有验证日期列的列?

有没有办法在不手动 selecting select 语句中的所有列的情况下获取数据框中的所有列。请分享您的 suggestions.TIA

数据

df= spark.createDataFrame([
  (1,'2022-03-01'),
  (2,'2022-04-17'),
  (3,None)
],('id','date'))

df.show()

+---+----------+
| id|      date|
+---+----------+
|  1|2022-03-01|
|  2|2022-04-17|
|  3|      null|
+---+----------+

你有两个选择

选项 1 select 不使用 N 和 Y 投影新列

 df.createOrReplaceTempView("input1");   

   
            
    String_look = "select id, date from input1 where length(date)>0"; 
    Dataset_op = spark.sql(String_look).show()

+---+----------+
| id|      date|
+---+----------+
|  1|2022-03-01|
|  2|2022-04-17|
+---+----------+

或者将 Y 和 N 投影到新列中。请记住在列投影之前应用 where 子句。所以你不能在 where 子句中使用新创建的列

String_look = "select id, date, case when length(date)>0 then 'Y' else 'N' end as status from input1 where length(date)>0";

+---+----------+------+
| id|      date|status|
+---+----------+------+
|  1|2022-03-01|     Y|
|  2|2022-04-17|     Y|
+---+----------+------+