我在pyspark中提供了以下方案的数据
  user_id  datadate       page_1.A   page_1.B  page_1.C  page_2.A  page_2.B  \
0      111  20220203         NaN       NaN      NaN      NaN       NaN   
1      222  20220203         5         5         5       5.0       5.0   
2      333  20220203         3         3         3       3.0       3.0   
     page_2.C  page_3.A  page_3.B  page_3.C  
0       NaN       1.0       1.0       2.0  
1       5.0       NaN       NaN       NaN  
2       4.0       NaN       NaN       NaN   因此,它包含像user_id、datadate这样的列,并且每个页面(获得3页)只有很少的列,这是两个联接的结果。在本例中,我有page_1、page_2、page_3,每个列都有3列: A、B、C。另外,对于每一页列,每一行都是空的或全部为空,如我的示例所示。我不关心每页每列的值,我只想得到每一行的A、B、C值,这些值都不是null。
希望得到的结果表示例:
  user_id  datadate  A  B  C
0      111  20220203  1  1  2
1      222  20220203  5  5  5
2      333  20220203  3  3  3所以逻辑是这样的:
df[A] = page_1.A or page_2.A or page_3.A, whichever is not null
df[B] = page_1.B or page_2.B or page_3.B, whichever is not null
df[C] = page_1.C or page_2.C or page_3.C, whichever is not null所有的行..。当然,我想以一种有效的方式来做。非常感谢。
发布于 2022-03-17 19:26:22
可以使用sql函数greatest提取列列表中的最大值。您可以在这里找到文档:https://spark.apache.org/docs/3.1.1/api/python/reference/api/pyspark.sql.functions.greatest.html
from pyspark.sql import functions as F
(df.withColumn('A', F.greates(F.col('page_1.A'), F.col('page_2.A), F.col('page_3.A'))
   .withColumn('B', F.greates(F.col('page_1.B'), F.col('page_2.B), F.col('page_3.B'))
   .select('userid', 'datadate', 'A', 'B'))https://stackoverflow.com/questions/71517121
复制相似问题