我想更改欄位“值”的資料型別,它位于陣列型別列“讀數”內。“閱讀”列有兩個欄位,“鍵”和“值”。
root
|-- name: string (nullable = true)
|-- languagesAtSchool: array (nullable = true)
| |-- element: string (containsNull = true)
|-- languagesAtSchool1: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _id: integer (nullable = true)
|-- languagesAtWork: array (nullable = true)
| |-- element: string (containsNull = true)
|-- currentState: string (nullable = true)
|-- previousState: double (nullable = true)
|-- readings: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- value: integer (nullable = true)
| | |-- key: string (nullable = true)
預期架構是
root
|-- name: string (nullable = true)
|-- languagesAtSchool: array (nullable = true)
| |-- element: string (containsNull = true)
|-- languagesAtSchool1: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _id: integer (nullable = true)
|-- languagesAtWork: array (nullable = true)
| |-- element: string (containsNull = true)
|-- currentState: string (nullable = true)
|-- previousState: double (nullable = true)
|-- readings: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- value: string (nullable = true)
| | |-- key: string (nullable = true)
uj5u.com熱心網友回復:
使用高階函式進行變換
選項1;適合當你想洗掉一些欄位-名稱必填欄位指令,sql運算式
df1=df.withColumn('readings', expr('transform(readings, x-> struct(cast(x.value as integer) value,x.key))'))
要么
選項 2;當您不想命名結構中的欄位時適用,也適用于 sql 運算式
df1=df.withColumn('readings', expr('transform(readings, x-> struct(x,cast(x.value as integer)))'))
選項 3,適用于不想在 struct 中鍵入欄位,不使用 sql 運算式的情況
df.withColumn('readings', F.transform('readings', lambda x: x.withField('value', x['value'].cast('int'))))
root
|-- name: string (nullable = true)
|-- languagesAtSchool: array (nullable = true)
| |-- element: string (containsNull = true)
|-- languagesAtSchool1: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- id: integer (nullable = true)
|-- languagesAtWork: array (nullable = true)
| |-- element: string (containsNull = true)
|-- currentState: string (nullable = true)
|-- previousState: double (nullable = true)
|-- readings: array (nullable = true)
| |-- element: struct (containsNull = false)
| | |-- value: integer (nullable = true)
| | |-- key: string (nullable = true)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/457314.html
