Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark 基于相同ID合并pyspark数据帧行_Apache Spark_Group By_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark 基于相同ID合并pyspark数据帧行

Apache spark 基于相同ID合并pyspark数据帧行,apache-spark,group-by,pyspark,apache-spark-sql,Apache Spark,Group By,Pyspark,Apache Spark Sql,我想展平hbase数据集。个人在其他表格中有两种类型的数据:邮件和电话。在以rel_id=data_id加入他们之后,我得到了一个人的两条单独记录 |individual_id|rel_id|data_id| mail|phone|role --------------------------------------------------------- | 1| 100| 100|a@gmail.com| null|secon

我想展平hbase数据集。个人在其他表格中有两种类型的数据:邮件和电话。在以rel_id=data_id加入他们之后,我得到了一个人的两条单独记录

    |individual_id|rel_id|data_id|       mail|phone|role
    ---------------------------------------------------------
    |            1|   100|    100|a@gmail.com| null|secondary
    |            1|   200|    200|       null|  123|primary
    |            2|   300|    300|       null|  345|secondary
    |            2|   400|    400|b@gmail.com| null|primary
    ------------------------------------------------
是否可以以某种方式合并同一个单独的_id的邮件和电话列,并为每个数据类型角色创建新列,以便获得如下数据:

    |individual_id|       mail|phone|mail_role |phone_role
    ------------------------------------------------------
    |            1|a@gmail.com|  123| secondary|primary
    |            2|b@gmail.com|  345|   primary|secondary
    -----------------------------------------------------

非常感谢您的帮助。

您可以按
个人id进行分组,并将其用作聚合功能。您必须将
first
ignorenulls
参数设置为
True

首先从pyspark.sql.functions导入
df.groupBy(“个人id”).agg(
第一个(“邮件”,ignorenulls=True)。别名(“邮件”),
第一个(“电话”,ignorenulls=True)。别名(“电话”)
).show()
#+-------------+-----------+-----+
#|个人身份证|邮件|电话|
#+-------------+-----------+-----+
#|            1|a@gmail.com|  123|
#|            2|b@gmail.com|  345|
#+-------------+-----------+-----+

对于更新后的问题,您可以使用:

从pyspark.sql.functions导入时,col
df.groupBy(“个人id”).agg(
第一个(“邮件”,ignorenulls=True)。别名(“邮件”),
第一个(“电话”,ignorenulls=True)。别名(“电话”),
首先(当(col(“mail”).isNotNull()时,col(“role”)),ignorenulls=True)。别名(“mail\u role”),
首先(当(col(“phone”).isNotNull()时,col(“role”)),ignorenulls=True)。别名(“phone\u role”),
).show()
#+-------------+-----------+-----+---------+----------+
#|个人身份|邮件|电话|邮件|角色|电话|角色|
#+-------------+-----------+-----+---------+----------+
#|            1|a@gmail.com|123 |第二|小学|
#|            2|b@gmail.com|345 |初级|次级|
#+-------------+-----------+-----+---------+----------+