#pyspark #apache-spark-sql
#pyspark #apache-spark-sql
Вопрос:
У меня есть dataframe df, и один столбец имеет тип данных struct<long:bigint, string:string>
из-за этой структуры типов данных я не могу выполнять сложение, вычитание и т.д…
как изменить struct<long:bigint, string:string>
на просто IntegerType
??
Комментарии:
1. просто выберите
df['col_name'].long
Ответ №1:
Вы можете использовать синтаксис точки для доступа к частям столбца структуры.
Например, если вы начнете с этого фрейма данных
df = spark.createDataFrame([(1,(3,'x')),(4,(8, 'y'))]).toDF("col1", "col2")
df.show()
df.printSchema()
---- ------
|col1| col2|
---- ------
| 1|[3, x]|
| 4|[8, y]|
---- ------
root
|-- col1: long (nullable = true)
|-- col2: struct (nullable = true)
| |-- _1: long (nullable = true)
| |-- _2: string (nullable = true)
пользователь может выбрать первую часть столбца struct и либо создать новый столбец, либо заменить существующий:
df.withColumn('col2', df['col2._1']).show()
С принтами
---- ----
|col1|col2|
---- ----
| 1| 3|
| 4| 8|
---- ----