所以我有一個關于pyspark的問題。我有一個資料框架,它看起來像這樣:
-- ------------
| id| list|
--- ------------
| 2|[3, 5, 4, 2]|
--- ------------
| 3|[4, 5, 3, 2]|
--- ------------
我想把串列分解成多行,并把串列中每個元素的位置資訊保存在一個單獨的列中。結果應該是這樣的:
-- ------------ ------------
| id| listitem| rank||
--- ------------ ------------
2| 3| 1|
--- ------------ ------------
| 2| 5| 2|
--- ------------ ------------
| 2| 4| 3|
--- ------------ ------------
| 2| 2| 4|
--- ------------ ------------
| 3| 4| 1|
--- ------------ ------------
| 3| 5| 2|
--- ------------ ------------
| 3| 3| 3|
--- ------------ ------------
| 3| 2| 4|
--- ------------ ------------
等級列有每個元素在串列中的位置的索引 1。有沒有關于實作它的最優化代碼的建議?
uj5u.com熱心網友回復:
你可以使用posexplode()或posexplode_outer()函式來獲得期望的結果。
df = spark. createDataFrame([(2, [3, 5, 4, 2]),(3, [4, 5, 3, 2]], ["id", "list"] )
df.select('id',posexplode_outer('list').alias('rank', 'listitem')
.withColumn('rank', col('rank') 1).show()
--- ---- --------
| id|rank|listitem|。
--- ---- --------
| 2| 1| 3|
| 2| 2| 5|
| 2| 3| 4|
| 2| 4| 2|
| 3| 1| 4|
| 3| 2| 5|
| 3| 3| 3|
| 3| 4| 2|
--- ---- --------
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/310747.html
標籤:
