Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查一行的多列值是否不为null,然后在Spark Scala中添加一个真/假结果列_Scala_Apache Spark - Fatal编程技术网

如何检查一行的多列值是否不为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
    本身是不明确的
  • 据我所知,通过数据帧存储和处理目标列是不可行的。这将创建一个开销,可以通过使用单个scala集合(即:Seq、Array、Set等)轻松避免
  • 以下是您问题的解决方案:

    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条件|
    // +------+-----------+--------+----------------+
    //|男|洛杉矶|空|假|
    //|女性|纽约|纽约|真实|
    //|跨|空|纽约|假|
    // +------+-----------+--------+----------------+
    
    让我重复这个问题,因为我没有完全按照你的回答