【问题标题】:Fetching values from multiple columns in Pyspark [duplicate]从 Pyspark 中的多列中获取值 [重复]
【发布时间】:2020-07-05 18:33:31
【问题描述】:

请查看输入和预期输出,并建议我在 Pyspark 中处理它的有效方法。

输入:带有

的数据框
C1 x y  
11 a  1  
12 a  2  
13 b  5  
14 b  6  
16 c  &b  
17 c  7  
18 c  b  

其中 C1 、 x 和 y 是列

预期输出:

C1 x  y  z  
11 a  1  [1]  
12 a  2  [2]  
13 b  5  [5]  
14 b  6  [6]  
16 c  &b [5,6]  
17 c  7  [7]  
18 c  b  [5,6]  

'z' 是预期的列,它应该为 'c' 获取相应的 'b' 值

它应该为 'c' 的第 5 行中的 &b 和 b 获取 [5,6] 。

提前谢谢????

【问题讨论】:

    标签: python pyspark


    【解决方案1】:

    试试这个,self-joincollected listrlike join condition 上是可行的方法。

    df.show() #sampledataframe
    
    #+---+---+---+
    #| C1|  x|  y|
    #+---+---+---+
    #| 11|  a|  1|
    #| 12|  a|  2|
    #| 15|  b|  5|
    #| 16|  b|  6|
    #| 17|  c| &b|
    #| 17|  c|  7|
    #| 18|  c|  b|
    #+---+---+---+
    
    df.join(df.groupBy("x").agg(F.collect_list("y").alias("y1"))\
              .withColumnRenamed("x","x1"),F.expr("""y rlike x1"""),'left')\
      .withColumn("z", F.when(F.col("y").cast("int").isNotNull(), F.array("y"))\
                        .otherwise(F.col("y1"))).drop("x1","y1").show()
    
    #+---+---+---+------+
    #| C1|  x|  y|     z|
    #+---+---+---+------+
    #| 11|  a|  1|   [1]|
    #| 12|  a|  2|   [2]|
    #| 15|  b|  5|   [5]|
    #| 16|  b|  6|   [6]|
    #| 17|  c| &b|[5, 6]|
    #| 17|  c|  7|   [7]|
    #| 18|  c|  b|[5, 6]|
    #+---+---+---+------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多