如何检查一行的多列值是否不为null,然后在Spark Scala中添加一个真/假结果列
嗨,最近怎么样?以下是我的两个数据帧:如何检查一行的多列值是否不为null,然后在Spark Scala中添加一个真/假结果列,scala,apache-spark,Scala,Apache Spark,嗨,最近怎么样?以下是我的两个数据帧: val id_df = Seq(("1","gender"),("2","city"),("3","state"),("4","age")).toDF("id","type") val main_df = Seq(("male",
val id_df = Seq(("1","gender"),("2","city"),("3","state"),("4","age")).toDF("id","type")
val main_df = Seq(("male","los angeles","null"),("female","new york","new york")).toDF("1","2","3")
以下是它们的表格形式:
这就是我想要的结果数据帧的样子:
我想检查id_df中的所有id,如果它们存在于main_df的列中,那么检查该行的所有id值是否都不是null。如果它们都不为null,那么我们在该行的“满足条件”列中输入“true”,否则输入“false”。注意,年龄的id号4不在main_df的列中,所以我们忽略它
我该怎么做
非常感谢,祝您度过愉快的一天。请允许我从两个简短的观察开始:
1不为null
。在这里,我们的意思是列1
还是值1
本身是不明确的import org.apache.spark.sql.functions.col
val id_df=序号(
(“c1”,“性别”),
(“c2”,“城市”),
(“c3”,“州”),
(“c4”,“年龄”)
).toDF(“id”、“类型”)
val main_df=序列(
(“男”,“洛杉矶”,空),
(“女性”、“纽约”、“纽约”),
(“trans”,空,“纽约”)
).toDF(“c1”、“c2”、“c3”)
val targetCols=id_df.collect()
.map{{{.getString(0)}//获取id
.toSet//将当前序列转换为集合(交叉点需要)
.intersect(main_df.columns.toSet)//使用main_df获取公共列
.map(col(_).isNotNull)//将c1,…cN转换为col(c[i])。isNotNull
.reduce(&&&)//在项之间应用AND运算符
//((c1不为空)和(c2不为空))以及(c3不为空))
带列的主方向(“符合条件”,targetCols).show(假)
// +------+-----------+--------+----------------+
//| c1 | c2 | c3 |符合| U条件|
// +------+-----------+--------+----------------+
//|男|洛杉矶|空|假|
//|女性|纽约|纽约|真实|
//|跨|空|纽约|假|
// +------+-----------+--------+----------------+
让我重复这个问题,因为我没有完全按照你的回答