這是我的資料框
Score Features
74.5 {description={termFrequency=4.0, similarityScore=37.8539953, uniqueTokenMatches=4.0},
code={termFrequency=4.0, similarityScore=36.7476063, uniqueTokenMatches=4.0}}
77.64 {description={termFrequency=3.0, similarityScore=36.080687, uniqueTokenMatches=3.0},
code={termFrequency=3.0, similarityScore=34.2332495, uniqueTokenMatches=3.0}}
在特征列中,我只想提取描述字典,不需要提取代碼字典,但特征列的型別是字串,我不想使用 substr() 來提取它。我如何通過使用 python pyspark 來做到這一點。
我想要輸出資料框
Score termFrequency similarityScore uniqueTokenMatches
74.5 4.0 37.8539953 4.0
77.64 3.0 36.080687 3.0
uj5u.com熱心網友回復:
可能這可以進一步優化,但是這個答案的一般想法是提取您需要的字典的字串表示部分,然后按分隔符拆分并進行一些清理以創建一個結構陣列,分解并將它們旋轉到創建新列。
進口:
from pyspark.sql import functions as F
代碼:
out = (df.withColumn("Features",
F.split(
F.regexp_replace(
F.regexp_extract("Features","(?:\{description=)(\{. }),",1)
,"\{|\}|\s ","")
,",")
)
.withColumn("Features",F.expr("""transform(
transform(Features,x-> split(x,'='))
,y->struct(y[0],cast(y[1] as float)))"""))
.selectExpr("Score","inline(Features)")
.groupBy("Score").pivot("col1").agg({"col2":'first'})
)
out.show()
----- --------------- ------------- ------------------
|Score|similarityScore|termFrequency|uniqueTokenMatches|
----- --------------- ------------- ------------------
| 74.5| 37.853996| 4.0| 4.0|
|77.64| 36.08069| 3.0| 3.0|
----- --------------- ------------- ------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/445136.html
上一篇:根據另一列值更改值符號
下一篇:按特定列值隨機播放資料框中的行
