如何在不使用 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|
+---+----------+------+
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|
+---+----------+------+