tha*_*les 3 row explode pyspark
我需要“克隆”或“复制”/“三次复制”数据框中的每一行。
我什么也没找到,我只知道我需要使用爆炸。
例子:
ID - Name
1 John
2 Maria
3 Charles
Run Code Online (Sandbox Code Playgroud)
输出:
ID - Name
1 John
1 John
2 Maria
2 Maria
3 Charles
3 Charles
Run Code Online (Sandbox Code Playgroud)
谢谢
您可以array_repeat与 一起使用explode。(Spark2.4+)
为了duplicate:
from pyspark.sql import functions as F
df.withColumn("Name", F.explode(F.array_repeat("Name",2)))
Run Code Online (Sandbox Code Playgroud)
为了triplicate:
df.withColumn("Name", F.explode(F.array_repeat("Name",3)))
Run Code Online (Sandbox Code Playgroud)
For <spark2.4:
#duplicate
df.withColumn("Name", F.explode(F.array(*[['Name']*2])))
#triplicate
df.withColumn("Name", F.explode(F.array(*[['Name']*3])))
Run Code Online (Sandbox Code Playgroud)
UPDATE:
为了使用另一列Support,replicate a certain number of times for each row您可以使用它。(Spark2.4+)
df.show()
#+---+-------+-------+
#| ID| Name|Support|
#+---+-------+-------+
#| 1| John| 2|
#| 2| Maria| 4|
#| 3|Charles| 6|
#+---+-------+-------+
from pyspark.sql import functions as F
df.withColumn("Name", F.explode(F.expr("""array_repeat(Name,int(Support))"""))).show()
#+---+-------+-------+
#| ID| Name|Support|
#+---+-------+-------+
#| 1| John| 2|
#| 1| John| 2|
#| 2| Maria| 4|
#| 2| Maria| 4|
#| 2| Maria| 4|
#| 2| Maria| 4|
#| 3|Charles| 6|
#| 3|Charles| 6|
#| 3|Charles| 6|
#| 3|Charles| 6|
#| 3|Charles| 6|
#| 3|Charles| 6|
#+---+-------+-------+
Run Code Online (Sandbox Code Playgroud)
对于spark1.5+,使用repeat, concat, substring, split & explode.
from pyspark.sql import functions as F
df.withColumn("Name", F.expr("""repeat(concat(Name,','),Support)"""))\
.withColumn("Name", F.explode(F.expr("""split(substring(Name,1,length(Name)-1),',')"""))).show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1965 次 |
| 最近记录: |