Python 从Pyspark中的多列获取值
请看一下输入和预期输出,并建议我在Pyspark中处理它的有效方法 输入:带有Python 从Pyspark中的多列获取值,python,pyspark,Python,Pyspark,请看一下输入和预期输出,并建议我在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]
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'而言,第五行的b和b的价格应为[5,6]
提前感谢尝试此功能,
使用
在
上进行自连接
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]|
#+---+---+---+------+