Dataframe Pyspark数据帧通过消除空值合并行
我有一个像这样的Pyspark数据帧Dataframe Pyspark数据帧通过消除空值合并行,dataframe,apache-spark,pyspark,apache-spark-sql,null,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,Null,我有一个像这样的Pyspark数据帧 +-----------+-------+----------+-------+-------+---------+ | ID_PRODUCT| VALUE | TIMESTAMP| SPEED | CODE | FIRMWARE| +-----------+-------+----------+-------+-------+---------+ | 3| 1| null| 124,21| null| n
+-----------+-------+----------+-------+-------+---------+
| ID_PRODUCT| VALUE | TIMESTAMP| SPEED | CODE | FIRMWARE|
+-----------+-------+----------+-------+-------+---------+
| 3| 1| null| 124,21| null| null|
| 5| 2| null| 124,23| null| null|
| 5| 2| null| 124,26| null| null|
| 6| 4| null| 124,24| null| null|
| 3| 1| null| null| 6764| null|
| 5| 2| null| null| 6772| null|
| 5| 2| null| null| 6782| null|
| 6| 4| null| null| 6932| null|
| 3| 1| null| null| null| 1|
| 5| 2| null| null| null| 1|
| 5| 2| null| null| null| 1|
| 6| 4| null| null| null| 1|
| 3| 1| 17:18:04| null| null| null|
| 5| 2| 18:22:40| null| null| null|
| 5| 2| 18:25:29| null| null| null|
| 6| 4| 18:32:18| null| null| null|
+-----------+-------+----------+-------+-------+---------+
我想合并它的列,它应该像这样,例如:
+-----------+-------+----------+-------+-------+---------+
| ID_PRODUCT| VALUE | TIMESTAMP| SPEED | CODE | FIRMWARE|
+-----------+-------+----------+-------+-------+---------+
| 3| 1| 17:18:04| 124,21| 6764| 1|
| 5| 2| 18:22:40| 124,23| 6772| 1|
| 5| 2| 18:25:29| 124,26| 6782| 1|
| 6| 4| 18:32:18| 124,24| 6932| 1|
+-----------+-------+----------+-------+-------+---------+
我尝试使用:
df = df.groupBy('id').agg(*[f.first(x,ignorenulls=True) for x in df.columns])
然而,这只是给我列的第一个值,我需要所有的记录。因为对于一个ID,我有不同的注册时间戳和不同的注册值,我现在失去了它们
感谢您的建议我不确定这是否是您想要的,但基本上您可以为每个id和列创建一个收集列表,并分解所有结果列表。这样,每个id可以有多个条目
from functools import reduce
import pyspark.sql.functions as F
df2 = reduce(
lambda x, y: x.withColumn(y, F.explode_outer(y)),
df.columns[2:],
df.groupBy('id_product', 'value').agg(*[F.collect_list(c).alias(c) for c in df.columns[2:]])
).distinct()
它如何知道要与哪一行合并?为什么要合并id为2和6的行?这是一个示例,初始行使用时间戳进行合并。请在问题中提供a,其中包括解决问题所需的所有详细信息。@mck i对其进行了更新:它如何知道哪一行对应于哪一行,如果存在“id_产品”、“值”的多个组合,例如5、2?